C#项目中引用的dll上的未知名称ComException

时间:2013-06-03 16:48:44

标签: c# c++ .net dll

我正在编写一个C#应用程序,它使用用C ++编写的一个dll作为参考。我可以使用该DLL命名空间,我的项目编译得很好。然而,当我运行它时,我继续在我为其分配属性值的行中出现错误。我得到的异常错误如下:

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
2013-06-03 12:26:32 - Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
2013-06-03 12:26:32 -    at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
2013-06-03 12:26:32 -    at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
2013-06-03 12:26:32 -    at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
2013-06-03 12:26:32 -    at sstObjTapLib._DsstObjTap.set_CapCode(String )
2013-06-03 12:26:32 -    at hpOutput.CTapPagerCom.MessageLoop() in c:\shs\Arial 8.1\XmarkClient\hpOutput\CTapPagerCom.cs:line 225

我使用以下代码启动了dll对象:

m_ctlTap = new sstObjTapLib.ctlTap();

以下是三个屏幕截图:

  1. 我使用的DLL的属性
  2. 我使用的dll的对象浏览器
  3. 显示异常发生位置的断点。
  4. 看看上面的堆栈错误,似乎.NET试图调用一些不存在的方法,但我只是设置一个属性值。有人能指出我正确的方向或我可能错过的东西吗?

    一个值得注意的一点:在调试时,我正在查看我加载的模块视图,但是我没有看到这个dll在我加载的模块列表中命名一个。

    enter image description here enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

我不确定为什么,但我使用过的电脑安装了同样的dll。我通过使用名为RegDllView的第三方工具查看它来了解这一点。

所以我进去了,取消注册我正在使用的dll,验证它也从注册表中消失,然后再次重新注册。清理我的项目并重新编译所有内容,并获得准确的代码。

看看我做了什么,我认为由于某种原因,应用程序无法识别提供的GUID以指向正确的COM。