来自HRESULT的异常:0x80004002(E_NOINTERFACE)

时间:2012-03-20 13:50:53

标签: c# exception com vb6

我负责维护C#应用程序(VS 2005)。这个C#应用程序调用一个DLL(“mydll.dll”)。我需要对有问题的dll进行一些更改。

我有一个用Visual Basic 6.0编写的文件“mydll.vbp”。我在Visual Studio中进行了更改,然后从Visual Basic界面“制作”mydll“”。

问题是,现在,每次我尝试在C#的debbuger模式下从“mydll.dll”实例化一个类时,我都有以下“InvalidCastException”

  

无法将mydll.ClassFrommydll类型的COM对象强制转换为接口类型mydll._ClassFrommydll'。此操作失败,因为对于具有IID“{384FB79F-B636-4655-9441-8222692AB8AE}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) 。

我试图重新引用有问题的dll ...但这并没有改变任何东西。

有关它可能来自何方的任何想法?

非常感谢所有可以提供帮助的yopu。几天来一直坚持这个问题。开始感受压力......

3 个答案:

答案 0 :(得分:4)

标记主类[STAThread] 你的问题将得到解决

答案 1 :(得分:3)

我使用IBM Dll遇到了这个确切的问题。

bysort Name (Member) : drop if (Wanted1 == 1 & Name == Name[_n-1]) | ///
                               (Wanted1 == 0 & Name == Name[_n-1])

list, sepby(Name)

     +-----------------------------------+
     | Name   Member   Wanted1   Wanted2 |
     |-----------------------------------|
  1. |  AAA        0         1         1 |
     |-----------------------------------|
  2. |  BBB        0         0         0 |
     |-----------------------------------|
  3. |  CCC        1         1         1 |
     +-----------------------------------+

为我解决了所有COM接口均可用且已清除异常的问题

答案 2 :(得分:0)

从班级中删除所有GUID和“ComVisible”属性, 然后将AssemblyInfo-File中的[assembly:ComVisible(true)]属性切换为'true'。