我正在编写一个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();
以下是三个屏幕截图:
看看上面的堆栈错误,似乎.NET试图调用一些不存在的方法,但我只是设置一个属性值。有人能指出我正确的方向或我可能错过的东西吗?
一个值得注意的一点:在调试时,我正在查看我加载的模块视图,但是我没有看到这个dll在我加载的模块列表中命名一个。
答案 0 :(得分:0)
我不确定为什么,但我使用过的电脑安装了同样的dll。我通过使用名为RegDllView的第三方工具查看它来了解这一点。
所以我进去了,取消注册我正在使用的dll,验证它也从注册表中消失,然后再次重新注册。清理我的项目并重新编译所有内容,并获得准确的代码。
看看我做了什么,我认为由于某种原因,应用程序无法识别提供的GUID以指向正确的COM。