.NET中的COM Interop

时间:2009-12-08 12:23:29

标签: reflection com interop

我有一个C#Visual Studio 2008项目,我想使用COM互操作XXXXLib(XXXX.dll)。

当然我之前必须添加对%windir%\ system32 \ xxxx.dll的引用,VS会将Interop.xxxx.dll添加到项目文件夹中,现在我必须用我的简单4分发这个200 KB的库KB应用程序。

但是,现在我知道PC没有XXXXLib或者不想使用它。在我的应用程序中,.NET需要检查客户端中是否存在COM。

如果客户端的PC上不存在COM,我希望我的应用程序不会失败。我想我不需要引用Interop,并使用反射来加载interop.xxxx.dll或其他解决方案。

其他次要问题,如何检查客户端计算机上是否存在COM?

你有什么好的示例代码吗?

我要求大师,为了最好的解决方案,我会把所有的爱都献给大师。

3 个答案:

答案 0 :(得分:1)

您应该在自己的代码中有条件地执行相同的操作,而不是使用Visual Studio生成的代码(可能始终执行)。转换代码即可。

我使用这种方法只需要在客户端计算机上安装三个COM组件中的一个(来自三个不同的供应商)(用于频谱显示的COM组件,用于mass spectrometry数据)。

我使用的代码可以找到here,靠近“添加频谱控制,但只有一个对应......”。可以找到函数addSpectrumControl()here

通过将调用包装在try-catch块中创建COM组件的实例,可以检查客户端计算机上是否存在COM组件。 如果失败则会抛出异常 抓住了块。你知道它不是 安装(或未注册或其他一些错误)。在任何 如果你知道它不能被使用。

答案 1 :(得分:0)

您应该使用您的应用分发该dll,请确保在必要时正确注册。 如果您的应用程序可以在没有该dll的情况下工作,那么请尝试加载它,如果失败...继续执行。如果没有..你必须在你的应用程序中安装它。

答案 2 :(得分:0)

最好的解决方案是添加是在您的分发包中添加xxxx.dll并使用它。

如果这是一种对您而言合适的方法 - 您可以尝试wix来制作安装程序。