在我的程序中,我使用动态创建Com +对象(后期绑定)
Type comObjectType = Type.GetTypeFromProgID(progId, true);
object comObject = Activator.CreateInstance(comObjectType);
Run Code Online (Sandbox Code Playgroud)
然后使用反射调用其中一个方法
object result = comObjectType.InvokeMember(MethodToActivate, BindingFlags.InvokeMethod, null, comObjec, new object[] {....});
Run Code Online (Sandbox Code Playgroud)
它在.Net 1.1/2.0/3.5中有效
现在我正在尝试在为.Net 4.0编译的同一台机器(Windows XP)上运行相同的代码,但我有一个
Exception: Method 'System.__ComObject.{MethodName}' not found.
Run Code Online (Sandbox Code Playgroud)
我有大多数Com +对象的例外(并非所有).有谁知道这是什么问题?为什么我在FW 4.0环境中得到例外?我该怎么做才能避免它?
非常感谢,丹尼尔
经过一些更多的调查后,我发现一些Com +代理被创建为System._ComObject(那些是本机的,我想),有些被创建为System.Runtime.Remoting.Proxies._TransparentProxy(我认为那些是.Net Com +对象).方法调用适用于那些创建System._ComObject和不起作用的方法System.Runtime.Remoting.Proxies._TransparentProxy.最有趣的事实是,在.Net 2.0中,所有对象都以相同的方式(_ComObject和_TransparentProxy)创建,但方法调用确实可以正常工作.另一个有趣的事实是,我可以使用reflecton在调试器中看到"丢失"方法
((System.EnterpriseServices.RemoteServicedComponentProxy)((((System.Runtime.Remoting.Proxies.__TransparentProxy)(ObjectToActivate)))._rp)).ProxiedType.GetMethods()
我想了一下它可能是一个安全问题,但我运行代码,因为WindowsService以具有管理员权限的用户身份登录