本文介绍了如何在C#编译器检测到COM类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑:我已经写的结果成一个的。


C#编译器把COM类型有点神奇。例如,这个语句看起来正常...

  Word.Application应用=新Word.Application();

...直到你意识到应用是一个接口。调用接口的构造? Yoiks!这实际上被转换成调用<$c$c>Type.GetTypeFromCLSID()和另一<$c$c>Activator.CreateInstance.

此外,在C#4,可以使用非参考论据 REF 参数,编译器只是增加了一个局部变量通过引用传递,丢弃的结果:

  // FileName参数是* *真正ref参数
app.ActiveDocument.SaveAs(文件名:Test.doc的);

(是啊,有一堆参数丢失不是可选参数不错:?)

我想探讨编译器的行为,我没有伪造的第一部分。我可以没有问题做第二部分:

 使用系统;
使用System.Runtime.InteropServices;
使用System.Runtime.CompilerServices;[ComImport,GuidAttribute(00012345-0000-0000-0000-000000000011)]
公共接口假人
{
    无效美孚(REF INT X);
}类测试
{
    静态无效的主要()
    {
        虚拟假人= NULL;
        dummy.Foo(10);
    }
}

我希望能够写:

 虚拟假人=新的虚拟();

虽然。显然,它会去执行时的一声,不过没关系。我只是尝试。

编译器为链接COM PIA的(编译器生成 TypeIdentifier )似乎并没有添加其他属性这样的伎俩......有什么魔力酱?


解决方案

绝不是我在这方面的专家,但我最近偶然什么我想你想:在CoClass属性类。

  [System.Runtime.InteropServices.CoClass(typeof运算(测试))]
公共接口虚拟{}

See my answer to a similar question about the Microsoft Speech API, where you're able to "instantiate" the interface SpVoice (but really, you're instantiating SPVoiceClass).

[CoClass(typeof(SpVoiceClass))]
public interface SpVoice : ISpeechVoice, _ISpeechVoiceEvents_Event { }

这篇关于如何在C#编译器检测到COM类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 18:22