2009-08-28 18 views
1

Powerpoint内のVBAから呼び出されたDLLを更新しました。すべての開発はうまくいったが、別のユーザーのマシンにデプロイしようとしたときに、デバッグ方法がわからないという問題が発生する。COM呼び出し可能ラッパーから返されたオブジェクトが正しくありません

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/codebase/tlb MyLib.dllを使用して再生成を試みましたが、これは役に立ちませんでした。

これ以上診断する​​方法はわかりません。うまくいけば、そこに誰かがこの種の問題を診断する方法のいくつかのステップを記載することができますか?この場合

+0

この場合、tlbファイルへの参照を削除し、再度追加して問題を解決しました。私はまだ盲目的に刺しても結局解決策を見つけたにもかかわらず、問題を診断するのに役立つことを知りたいと思っています。 – Modan

+0

私は同様の問題を抱えていますが、ネイティブVBAクラスのインスタンスを作成すると、追加/削除の参照(http://stackoverflow.com/questions/2677091/automating-excelthrough-the-pia-makes-vba-go-squiffyを参照) - これを診断するためにさらに進歩しましたか?もしあれば、どんな提案?ありがとう! –

+0

@Modan:あなた自身の質問に答えて、あなたが探しているものを見つけたことを知らせる自分の答えを受け入れることができます。 – adamleerich

答えて

0

、TLBファイルへの参照を削除し、再度それを追加することが問題残念ながら

を解決し、私は一般的な解決策、または行動の説明を見つけることはなかったです。

+1

タイプとライブラリとすべてのインターフェイスのさまざまなGUIDを確認します.Wrong.TypeとFoo.Barタイプとそのインターフェイスを見てください。 – Arafangion

1

自動的に生成されるGUID(クラス、インターフェイス、タイプライブラリ)の問題が発生する可能性があります.DLLを変更すると、GUIDが変更されました。以前のTLBは古いGUIDを使用していたため、古いGUIDを参照することによって、古いGUIDに型名が関連付けられたため、コードは新しいGUIDで機能しませんでした。私が遭遇したほとんどのVB(6と.NET)コードはこの問題を抱えています。もしあなたのDLLがVBで書かれているのであれば、おそらくそれです。

これが問題である場合、一般的な解決策はGUIDを明示的に設定することです。バージョンが多い場合は少し迷惑です。バージョンの変更に合わせてGUIDを変更する必要があります手動で行う必要があります。

関連する問題