Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# COM对象是动态的还是静态的_C#_.net 4.0_Com - Fatal编程技术网

C# COM对象是动态的还是静态的

C# COM对象是动态的还是静态的,c#,.net-4.0,com,C#,.net 4.0,Com,我试图制作一种代理,我想知道COM方法和属性是静态的还是动态的。换句话说,.NET是否调用com对象并告诉它要执行哪个方法,然后让com对象假装它已经执行了它(DynamicObject允许您在.NET中执行的方式,只是在不执行任何操作的情况下为TryInvokeMember返回true),或者.NET是否实际直接调用com方法(静态)?听起来你在问早期绑定(静态)和后期绑定(动态)之间的区别。C#支持两者 早期绑定要求您使用类似于生成COM对象代理的工具创建互操作程序集,该代理直接调用接口方法

我试图制作一种代理,我想知道COM方法和属性是静态的还是动态的。换句话说,.NET是否调用com对象并告诉它要执行哪个方法,然后让com对象假装它已经执行了它(DynamicObject允许您在.NET中执行的方式,只是在不执行任何操作的情况下为TryInvokeMember返回true),或者.NET是否实际直接调用com方法(静态)?

听起来你在问早期绑定(静态)和后期绑定(动态)之间的区别。C#支持两者

早期绑定要求您使用类似于生成COM对象代理的工具创建互操作程序集,该代理直接调用接口方法

要使用后期绑定,可以使用反射(messy)或
dynamic
关键字在运行时绑定方法调用


但是,COM对象不会“假装”它执行了您要求的方法-如果该方法不存在,您将得到一个运行时异常。

您能澄清一下“COM对象假装它执行了它(动态)”吗?@Alexei:他问的是方法绑定是否由编译器完成(静态绑定),或者对象本身是否解析绑定-就像/which可以假装有任何方法一样。
Activator.CreateInstance
是否会延迟绑定?如果COM对象愿意,它是否可以假装该方法存在?或者.NET以某种方式让它做了一些事情吗?如果您按方法的字符串名调用方法,那么是的,这将是后期绑定。COM对象是否可以忽略对缺少的方法的调用?不是在C#中创建的。你必须在C++中手动实现IDISP补丁,这将是一个痛苦。你想做什么?我想弄清楚如何创建DynamicObject COM对象,但现在我知道我找错了方向。我对COM也不太了解,所以我也在努力想办法。我要问另一个问题。你当然可以用
动态对象
包装COM包装,尝试使用后期绑定调用方法,如果失败了什么也不做,但我可能误解了你的意图。我正在尝试制作一个使用反射和
动态对象
的代理。我基本上让它工作,但对于我的用例,它也必须能够从COM调用。或者不管正确的术语是什么。