2012-03-11 19 views
1

すべての混乱について申し訳ありませんが、の:は、クラス継承に間違って入力されました。また、キーワード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を使用し
  1. Foo2さんのDLL、結果は

    [email protected]@@[email protected]@@Z
    [email protected]@@[email protected]@@Z
    あるQuestion2、手紙の違いをすべきをしましたそこにいるかどうか?

  2. 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のエクスポートに関して何か重要なものがないのかどうかはわかりません。

希望している作業の方向や考えられる原因について、いくつかの提案を得ることができます。

私が問題を明確に記述しているかどうかわからない場合は、必要に応じて自由に変更してください。

ありがとうございます!

+2

一部のメンバー関数だけでなく、実際のクラス定義を教えてください。 – ildjarn

+2

投稿されたコードは確かにC++ではありません: 'Class'はキーワードでも(classは)ですが、' class T :: S'の構文もC++の部分ではありません( '__declspec(dllimport)'を無視します)。いずれかの非C++の不器用さです)。 –

+0

コードをコピーしてスローアウェイテストプログラムに貼り付けることで問題を特定し、問題がまだ存在し、これ以上スローアウェイできなくなるまで。まだ他の人が再現できるようにテストプログラムを適切なフォーラムに投稿できない場合は、 –

答えて

0

BOOLEAN Foo2 :: dosomething(Arg * arg)//質問1、ここで*重要なのは?

*の位置は関係ありません。

DoSomething関数はコンストラクタまたはデストラクタですか?

+0

どちらもメンバー関数ではありません。 – Derek

+0

これは奇妙なことですが、このエフェクトを生成するコンパイル可能なコードサンプルを提供できますか? – Stefan

関連する問題