我有一个C#dll(为其设置COM互操作选项的注册表)。将托管C#列表返回到非托管C++代码
这个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 mehtod没有任何问题。
由于GetNameList方法返回列表中,我得到以下警告
'MyDll.IMyInterface.GetNameList(#0),MYDLL'。警告:类型库 导出程序在签名中遇到了泛型类型实例。通用 代码可能不会导出到COM。
请帮助我如何将C#列表返回给非托管C++代码。所以非托管C++代码可以使用这个列表。
COM知道关于.NET泛型的bean。改为返回一个ArrayList或非泛型IEnumerator或您自己的集合接口。 –