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"。求助!!!

解决方案 »

  1.   

    使用depends.exe查看exe或dll依赖的其他dll的版本号。
      

  2.   

    我用depends查看这个COM的dll文件,查到它依赖mscoree.dll。我对比运行正常和不正常电脑上的这个文件,发现都是一样的。
      

  3.   

    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++程序:
      

  4.   

    我猜是VS2010编译的?C# dll右键 属性-》生成-》目标平台anycpu改成x86