【发布时间】:2014-09-14 13:41:48
【问题描述】:
我有一个 C# dll(为它设置了 COM 互操作选项的寄存器)。
此 C# dll 具有以下接口和类
interface IMyInterface
{
bool IsNameExists(string name);
List<string> GetNameList();
}
public class MyClass : IMyInterface
{
public bool IsNameExists(string name)
{
//DO Something
}
public List<string> GetNameList()
{
// DO something
}
}
我需要从非托管 C++ 中调用 IsNameExists 和 GetNameList 方法。
#import "..\..\ProdCon\bin\ProdCon.tlb" raw_interfaces_only
void main()
{
HRESULT hr =::CoInitialize(NULL);
IMyInterface pIMyInterface(__uuidof(MyClass));
VARIANT_BOOL bRet = FALSE;
BSTR bstrName = ::SysAllocString(_T("RAJESH"));
hr = pIMyInterface->IsNameExists(bstrName,&bRet);
}
所以我像上面一样创建了 COM 对象并调用 IsNameExists 方法没有任何问题。
由于 GetNameList 方法返回列表,我收到以下警告
'MyDll.IMyInterface.GetNameList(#0),MyDll'。警告:类型库 导出器在签名中遇到泛型类型实例。通用的 代码可能无法导出到 COM。
请帮助我如何将 C# 列表返回到非托管 C++ 代码。这样非托管 C++ 代码就可以使用这个列表。
【问题讨论】:
-
COM 了解 .NET 泛型。返回一个 ArrayList 或非泛型 IEnumerator 或您自己的集合接口。