C++呼叫C#寫的COM,在不同的電腦上運行,有的正常,有的會報錯,系統都是win7 32位。
報錯資訊如下:
System.Exception {System.Reflection.TargetException}
+ [System.Reflection.TargetException] {"Object does not match target type."} System.Reflection.TargetException
+ Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
Message "Object does not match target type."
Source "mscorlib" string
StackTrace " at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)\r\n at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)\r\n at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)\r\n at Client1.IOleTestEvents.OnNewData(Object NewData)\r\n at Client1.OleTest.NewData(String[] NewData) in d:\\source code\\Centurion\\Main\\Source\\Libraries\\OpenApps\\KicClient\\KicClient.cs:line 547"。
求助!!!
uj5u.com熱心網友回復:
使用depends.exe查看exe或dll依賴的其他dll的版本號。uj5u.com熱心網友回復:
我用depends查看這個COM的dll檔案,查到它依賴mscoree.dll。我對比運行正常和不正常電腦上的這個檔案,發現都是一樣的。uj5u.com熱心網友回復:
C#撰寫COM中的委托函式:
public delegate void DelNewData(object NewData);
public event DelNewData OnNewData;
public void NewData(object NewData)
{
try
{
if (OnNewData != null)
{
OnNewData(NewData);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.Print(ex.ToString());
}
}
呼叫COM所用的C++程式:
uj5u.com熱心網友回復:
捕獲 應捕獲的所有例外,判斷應判斷的所有回傳值,……小心駛得萬年船。
uj5u.com熱心網友回復:
原文就是C#中捕獲的例外,我覺得應該是C++中拋出的,老師怎么看?uj5u.com熱心網友回復:
首先必須同為32位或64位,我覺得。uj5u.com熱心網友回復:
我猜是VS2010編譯的?C# dll右鍵 屬性-》生成-》目標平臺anycpu改成x86轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/78336.html
上一篇:MFC控制元件Edit control文字只顯示一半 好像被什么擋住了?
下一篇:MFC中檔案讀取路徑并發送
