问题描述
|
在我的程序中,我使用以下方法动态创建Com +对象(后期绑定)
Type comObjectType = Type.GetTypeFromProgID(progId,true);
object comObject = Activator.CreateInstance(comObjectType);
然后使用反射调用其中一种方法
object result = comObjectType.InvokeMember(MethodToActivate,BindingFlags.InvokeMethod,null,comObjec,new object[] {....});
在.Net 1.1 / 2.0 / 3.5中效果很好
现在,我试图在为.Net 4.0编译的同一台计算机(Windows XP)上运行相同的代码,但是
Exception: Method \'System.__ComObject.{MethodName}\' not found.
对于大多数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的调试器中看到\“ missing \”方法
((System.EnterpriseServices.RemoteServicedComponentProxy)((((System.Runtime.Remoting.Proxies.__TransparentProxy)(ObjectToActivate)))._rp)).ProxiedType.GetMethods()
我想了一会儿可能是安全问题,但我以具有管理员权限的用户身份登录WindowsService来运行代码
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)