すべての混乱について申し訳ありませんが、の:
は、クラス継承に間違って入力されました。また、キーワードpublic
がありません。いつも:
です。すべての役に立ってくれてありがとう。C++の派生関数が呼び出されていません
最初にタイトルが一般的すぎるかもしれませんが、ここで問題をより詳しく説明する方法はわかりません。私が持っているもの
、
class __declspec(dllimport) Foo1:public Foo
{
virtual BOOLEAN bar(Arg *arg);
}
class __declspec(dllimport) Foo2:public Foo1
{
virtual BOOLEAN bar(Arg *arg); //newly added
}
両方の機能が実装され、私は
BOOLEAN Foo2::dosomething(Arg* arg) //Question 1, should the position of * matter here?
{
bar(arg);
}
しかし、これはまだFoo1::bar
代わりのFoo2::bar
を呼び出すことfoo2は下の機能を持っています。私は署名を二重にチェックし、問題はない。だから私はいくつかの実験、
Foo1
でエクスポート符号化された関数名を比較すること
PE Explorerを使用し
と
Foo2
さんのDLL、結果は[email protected]@@[email protected]@@Z
[email protected]@@[email protected]@@Z
あるQuestion2、手紙の違いをすべきをしましたそこにいるかどうか?Foo1
からbar
を削除し、次に実行すると、エラーが上がってきた、The procedure engry point [email protected]@@[email protected]@@Z could not be located in the dynamic link library libFoo1.dll
を言いました。私はここで理解していない何
は呼び出しですFoo2
下にあるが、まだFoo1
の機能を見つけようとしています。また、Foo1
の前と、Foo2
の後の複数の継承レベルがありますので、関数の導出の使用やdllのエクスポートに関して何か重要なものがないのかどうかはわかりません。
希望している作業の方向や考えられる原因について、いくつかの提案を得ることができます。
私が問題を明確に記述しているかどうかわからない場合は、必要に応じて自由に変更してください。
ありがとうございます!
一部のメンバー関数だけでなく、実際のクラス定義を教えてください。 – ildjarn
投稿されたコードは確かにC++ではありません: 'Class'はキーワードでも(classは)ですが、' class T :: S'の構文もC++の部分ではありません( '__declspec(dllimport)'を無視します)。いずれかの非C++の不器用さです)。 –
コードをコピーしてスローアウェイテストプログラムに貼り付けることで問題を特定し、問題がまだ存在し、これ以上スローアウェイできなくなるまで。まだ他の人が再現できるようにテストプログラムを適切なフォーラムに投稿できない場合は、 –