尝试在我的C#应用程序中使用一些COM对象。
1-第一备选案文:
using AXVLC;
Type t = Type.
GetTypeFromCLSID(
Guid.Parse("E23FE9C6-778E-49D4-B537-38FCDE4887D8")
);
AXVLC.VLCPluginClass vid = Activator.CreateInstance(t) as VLCPluginClass;但是得到这样的错误:互操作类型'AXVLC.VLCPluginClass‘不能嵌入。使用适用的接口代替。ComObjectCalls
我知道COM对象不公开公共构造函数,因此我必须找到使用该对象的其他方法。很多时候COM对象使用工厂模型来创建对象的实例(例如。IClass实例= COMClass.CreateInstance();)
或者尝试使用Activator.CreateInstance()
还有一个关于COM对象的问题:-我使用了动态类型:dynamic =
它创造了-好的。但如何让人知道,我可以用在它上。我该怎么投呢?
主要问题是:我想使用Silverlight应用程序访问COM-object。因此,可以使用动态/指数对象或使用Silverlight中的一些本机库调用P/Invoke,如:
[DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "MessageBox")]
public static extern IntPtr MineMessageBox(int hWnd, string text,
string caption, uint type);
...
MineMessageBox(0, "Hello World", "Platform Invoke Sample", 0);在Silverlight中访问COM对象特性的最佳方法是什么,也可以在运行时获取有关这个COM对象的所有信息(获取方法,我可以调用等)。
谢谢!
发布于 2012-12-19 10:56:26
所有COM对象都符合一个接口,这就是您的方法的来源。
在VLC ActiveX控件的情况下,您可能会使用AXVLC.VLCPlugin而不是AXVLC.VLCPluginClass。这类似于Office使用Application而不是ApplicationClass的互操作。
在您使用dynamic的第二个实例中,让您的IntelliSense正常工作的一种方法是简单地将CreateObject返回到接口。但是,您需要记住在构建之前删除它,否则强制转换将在运行时失败。
另一种方法(也是更好的方法)是简单地处理COM对象的文档。
发布于 2013-01-07 23:05:44
使用AutomationFactory类和dynamic关键字(最少.net 4.0 /s1.4.0 )。
https://stackoverflow.com/questions/13950666
复制相似问题