首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C# / Silverlight中从COM对象访问函数

在C# / Silverlight中从COM对象访问函数
EN

Stack Overflow用户
提问于 2012-12-19 10:50:14
回答 2查看 548关注 0票数 0

尝试在我的C#应用程序中使用一些COM对象。

1-第一备选案文:

代码语言:javascript
复制
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,如:

代码语言:javascript
复制
[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对象的所有信息(获取方法,我可以调用等)。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-19 10:56:26

所有COM对象都符合一个接口,这就是您的方法的来源。

在VLC ActiveX控件的情况下,您可能会使用AXVLC.VLCPlugin而不是AXVLC.VLCPluginClass。这类似于Office使用Application而不是ApplicationClass的互操作。

在您使用dynamic的第二个实例中,让您的IntelliSense正常工作的一种方法是简单地将CreateObject返回到接口。但是,您需要记住在构建之前删除它,否则强制转换将在运行时失败。

另一种方法(也是更好的方法)是简单地处理COM对象的文档。

票数 1
EN

Stack Overflow用户

发布于 2013-01-07 23:05:44

使用AutomationFactory类和dynamic关键字(最少.net 4.0 /s1.4.0 )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13950666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档