我刚才提出的更新时被从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)的变化,和你”将不得不做手工。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top