我有一个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++代码可以使用这个列表。