IDictionary 互操作 C# C++

问题描述

使用 CLR 托管,我尝试将字典参数传递给我的 C# 方法

static public void MyFct(Dictionary<string,string> info) 
{
...
}

C++ 部分

CLSID clsid;
CLSIDFromProgID(L"System.Collections.Hashtable",&clsid);

// dict creation
IDictionaryPtr pHash;
CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(mscorlib::IDictionary),(void **)  &pHash);

variant_t vKey(L"key");
variant_t vValue(L"value");

hr = pHash->Add(vKey,vValue);

variant_t vtHash = static_cast<IUnkNown *>(pHash);

// adding it to C# args list
SAFEARRAY* psaStaticmethodArgs = SafeArrayCreateVector(VT_VARIANT,1);

LONG i = 0;
SafeArrayPutElement(psaStaticmethodArgs,&i,&vtHash);

// adding param to C# method call
// (spType is the pointer to my class)
hr = spType->InvokeMember_3(MyFct,static_cast<BindingFlags>(BindingFlags_InvokeMethod | ...),vtEmpty,psaStaticmethodArgs,&vtRet);

但是调用失败 它告诉我“找不到方法”。 当参数类型不匹配时会发生这种情况。

如果它太复杂,我应该使用 C++/CLI(我不是那种东西的忠实粉丝):)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)