1

こんにちは、DLL のエクスポートされた関数を DLL 内の別の関数に転送しています。DLLのエクスポートテーブルの編集にはExpX64を使用しています。(たとえば、?MyFunc@MyClass@@SAJJAEAUMyStruct@@@Z を myDLL.?MyFunc@MyClass@@SAJJAEAUMyStruct@@@Z に転送します)

私の問題は、ターゲット関数がクラスのメンバーであり、実行時に COMException を生成する転送 (「存在しなくなったオブジェクトを使用しようとした」) です。

私が間違っていると思いますか?(呼び出し規則? 通常の関数の転送とクラスメンバーの関数の転送には違いがあるはずです。) MyFunc を次のように実装します。

__declspec(dllexport) LONG MyClass::MyFunc (long a,struct MyStruct& b)

ps: DLL プロキシを使用することもできます (必要なターゲット関数を実装するプロキシ DLL を作成し、他のすべての関数を元の DLL に転送しますが、関数がクラスの一部であるという問題はまだ残っています)。

ありがとう

4

1 に答える 1

0

発生するエラーが転送に関係しているとは思えません。エラーはSTG_E_REVERTEDで、これは構造化ストレージに関連しています(メソッドは完全に無関係のようです)。このエラーは、SharePoint アプリケーションで特に頻繁に発生するようです。

編集:構造化ストレージは、COM で永続化するための Microsoft API です。

于 2010-12-18T12:42:20.887 に答える