本文介绍了如何在C#编译器检测到COM类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
编辑:我已经写的结果成一个的。
C#编译器把COM类型有点神奇。例如,这个语句看起来正常...
Word.Application应用=新Word.Application();
...直到你意识到应用
是一个接口。调用接口的构造? Yoiks!这实际上被转换成调用<$c$c>Type.GetTypeFromCLSID()$c$c>和另一<$c$c>Activator.CreateInstance$c$c>.
此外,在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类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!