1

Powerpoint 内の VBA から呼び出される dll を更新しました。開発はすべてうまくいきましたが、別のユーザーのマシンにデプロイしようとすると、デバッグ方法がわからないという問題が発生します。

何が起こるかというと、VBA で .Net オブジェクトが作成されると、返される参照が間違ったオブジェクトへのものであるため、次の行はメソッドが見つからないというエラーになります。

Dim myObj As Foo.Bar

Public Sub RefreshData()

//'instantiate object
Set myObj = New Foo.Bar   
//'call a method
myObj.HelloWorld

最後の行は、実行時エラー '438' Object does not support this property or methodで失敗します。これは、myObj の型が「Foo.Bar」ではなく「Wrong.Type」であることが原因です。

「Wrong.Type」もアセンブリに含まれているため、タイプ ライブラリに問題があると思われますが、( regasm /codebase /tlb MyLib.dll を使用して) 再生成を試みましたが、これは役に立ちませんでした。

これ以上診断する​​方法がわかりません。うまくいけば、誰かがこの種の問題を診断する方法についていくつかの手順をリストできますか?

4

2 に答える 2

1

自動的に生成された GUID (クラス、インターフェイス、タイプ ライブラリ) の問題である可能性があります。DLL を変更すると、GUID が変更されます。古い TLB は古い GUID を使用していたため、それを参照して古い GUID を型名に関連付けたため、コードは新しい GUID で機能しませんでした。私が遭遇したほとんどの VB (6 および .NET) コードにはこの問題があるため、DLL が VB で記述されている場合は、おそらくそれが原因です (そして、あなたの回避策はこの理論をサポートしています)。

それが問題である場合、一般的な解決策は、GUID を明示的に設定することです。これは、バージョンが変更されたときに GUID を変更する必要があるため、多くのタイプがある場合は少し面倒です。手動で行います。

于 2015-01-29T01:39:12.697 に答える
0

この場合、tlb ファイルへの参照を削除し、再度追加すると問題が解決しました

残念ながら、一般的な解決策や動作の説明は見つかりませんでした。

于 2011-10-14T13:32:40.867 に答える