在DLL里面调用COM组件的接口函数出错

时间:2022-08-29 22:53:07
本人开发工具是VS2010,操作系统是WINDOWS7 64位,C# 开发。

调用COM组件的方法是直接在 Add Reference 对话框中选择COM选项卡,选择其中的COM服务。

如果在生成的一个应用程序(EXE)中直接添加,没问题,一切正常。

但我需要在一个DLL中调用COM,然后外部EXE程序再调用我的DLL,这个时候就会出现COM的某些函数无法调用,就会出现类似“Error HRESULT E_FAIL has been returned from a call to a COM component.”的错误。

困扰2天了,求解!

14 个解决方案

#1


顶上去,求解!

#2


学习中……

#3


外部EXE程序  是什么程序?
有没有代码?
感觉 外部这个程序是不是也要引用 com

#4


如果在exe程序中调用com就没有任何问题,如果是在dll中调用就出错。

#5


在DLL中调用COM后,调用DLL的外部EXE就不需要再直接调用COM了,功能都在DLL中实现了嘛。

我想我已经表述清楚了吧。

#6


在DLL中调用COM后,调用DLL的外部EXE就不需要再直接调用COM了,功能都在DLL中实现了嘛。

我想我已经表述清楚了吧。

#7


在Dll中调用com组件,一般要加入组件初始化的调用。
你找到初始化comm组件的api函数,导入到你的dll工程中。
在dll中使用com组件之前,调用初始化函数。
CoInitialize

#8


引用 7 楼 mjp1234airen4385 的回复:
在Dll中调用com组件,一般要加入组件初始化的调用。
你找到初始化comm组件的api函数,导入到你的dll工程中。
在dll中使用com组件之前,调用初始化函数。
CoInitialize


老兄,我根本就找不到CoInitialize,能否贴出一点代码?谢谢

#9


还是迷茫中。。。

#10


那就在EXE所在的DLL引用COM组建呗,后台调用时通过委托来实现不就行了!

#11


学习~~~`

#12


引用 10 楼 loveyan52152112 的回复:
那就在EXE所在的DLL引用COM组建呗,后台调用时通过委托来实现不就行了!


DLL都是不行的。

#13


System.Runtime.InteropServices.COMException was caught
  Message=Exception from HRESULT: 0xC0040007
  Source=GWOPC.NET
  ErrorCode=-1073479673

#14


注意,我的DLL是运行在windows服务进程之中。

如果不在windows服务中运行的话,是可以通过DLL调用COM组件的。

呵呵。

#1


顶上去,求解!

#2


学习中……

#3


外部EXE程序  是什么程序?
有没有代码?
感觉 外部这个程序是不是也要引用 com

#4


如果在exe程序中调用com就没有任何问题,如果是在dll中调用就出错。

#5


在DLL中调用COM后,调用DLL的外部EXE就不需要再直接调用COM了,功能都在DLL中实现了嘛。

我想我已经表述清楚了吧。

#6


在DLL中调用COM后,调用DLL的外部EXE就不需要再直接调用COM了,功能都在DLL中实现了嘛。

我想我已经表述清楚了吧。

#7


在Dll中调用com组件,一般要加入组件初始化的调用。
你找到初始化comm组件的api函数,导入到你的dll工程中。
在dll中使用com组件之前,调用初始化函数。
CoInitialize

#8


引用 7 楼 mjp1234airen4385 的回复:
在Dll中调用com组件,一般要加入组件初始化的调用。
你找到初始化comm组件的api函数,导入到你的dll工程中。
在dll中使用com组件之前,调用初始化函数。
CoInitialize


老兄,我根本就找不到CoInitialize,能否贴出一点代码?谢谢

#9


还是迷茫中。。。

#10


那就在EXE所在的DLL引用COM组建呗,后台调用时通过委托来实现不就行了!

#11


学习~~~`

#12


引用 10 楼 loveyan52152112 的回复:
那就在EXE所在的DLL引用COM组建呗,后台调用时通过委托来实现不就行了!


DLL都是不行的。

#13


System.Runtime.InteropServices.COMException was caught
  Message=Exception from HRESULT: 0xC0040007
  Source=GWOPC.NET
  ErrorCode=-1073479673

#14


注意,我的DLL是运行在windows服务进程之中。

如果不在windows服务中运行的话,是可以通过DLL调用COM组件的。

呵呵。