我有一個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或您自己的集合接口。 –