从COM可调用包装返回错了对象
题
我刚才提出的更新时被从VBA在PowerPoint调用的DLL。所有的发展都很好,但是当我试图到另一个用户计算机上部署,我感到我不知道如何调试问题。
所发生的是在VBA创建.NET对象时,则返回的参考是到错误的对象,所以下一行失败,并没有发现方法。
Dim myObj As Foo.Bar
Public Sub RefreshData()
//'instantiate object
Set myObj = New Foo.Bar
//'call a method
myObj.HelloWorld
最后一行失败的运行时错误“438”对象不支持此属性或方法强>这是由以下事实引起的MyObj中的类型是“Wrong.Type”的某种方式,而不是“Foo.Bar”。
“Wrong.Type”也是在组装,所以我想的东西与类型库去错了,但我已经尝试再生(使用regasm /基本代码/ TLB中是指mylib.dll),而这并没有帮助。
我不知道如何进一步诊断此。但愿有人在那里可以列出有关如何诊断这种问题的一些措施?
解决方案 2
在这种情况下,除去参照TLB文件,然后将其添加再次解决了这个问题
不幸的是,我从来没有找到一个通用的解决方案,或者行为的解释。
其他提示
有可能自动生成的GUID(类,接口,类型库)的问题 - 当你改变了DLL,GUID的改变。由于旧的TLB使用的旧的GUID,通过引用它,你相关的那些旧的GUID与类型名称,使代码失败,新的GUID来工作。我遇到的大多数VB(6和.NET)代码有这个问题,所以如果你的DLL是用VB写,这可能是它(和你的工作围绕支持这一理论)。
如果是这样的问题,一般的解决方法是明确设置的GUID,这是一个有点恼人,如果你有很多的类型,因为你应该更改GUID为您的版本(S)的变化,和你”将不得不做手工。
不隶属于 StackOverflow