小编Dan*_*zon的帖子

Com +后期绑定c#4.0

在我的程序中,我使用动态创建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以具有管理员权限的用户身份登录

.net c# com+

9
推荐指数
1
解决办法
4737
查看次数

标签 统计

.net ×1

c# ×1

com+ ×1