Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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#/Silverlight中的COM对象访问函数_C#_Silverlight_Com_Pinvoke - Fatal编程技术网

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

从C#/Silverlight中的COM对象访问函数,c#,silverlight,com,pinvoke,C#,Silverlight,Com,Pinvoke,正在尝试在我的C#应用程序中使用一些COM对象 第一种变体: using AXVLC; Type t = Type. GetTypeFromCLSID( Guid.Parse("E23FE9C6-778E-49D4-B537-38FCDE4887D8") ); AXVLC.VLCPluginClass vid = Activator.CreateInstance(t) as VLCPluginClass; 但如果出现这样的错

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

第一种变体:

using AXVLC;

Type t = Type.
           GetTypeFromCLSID(
           Guid.Parse("E23FE9C6-778E-49D4-B537-38FCDE4887D8")
           );

AXVLC.VLCPluginClass vid = Activator.CreateInstance(t) as VLCPluginClass;
但如果出现这样的错误: 无法嵌入互操作类型“AXVLC.VLCPluginClass”。改用适用的接口。com对象调用

我知道COM对象不公开公共构造函数,那么我必须找到使用该对象的其他方法。很多时候COM对象使用工厂模型来创建对象的实例(例如,IClass instance=COMClass.CreateInstance();)

或者尝试使用Activator.CreateInstance()

我还有一个关于COM对象的问题: -我已经使用了动态类型:dynamicshell=AutomationFactory.CreateObject(“WMPlayer.OCX.7”)

它创造了-好的。但是如何知道,我可以用什么方法。我该怎么投

主要问题是:我想用Silverlight应用程序访问COM对象。 因此,有一种方法可以使用dynamic/expondo对象或在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对象的所有信息(获取方法,我可以调用等)的最佳方式是什么


谢谢大家!

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

对于VLC ActiveX控件,您可能会使用
AXVLC.VLCPluginClass
,而不是使用
AXVLC.VLCPlugin
。这类似于Office的互操作,即使用
应用程序
而不是
应用程序类

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


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

使用
AutomationFactory
类和
dynamic
关键字(.net 4.0/sl 4.0最小值)