0

gph は getInstance メソッドを持たないシングルトン クラスです

class gph 
{
public:

  static void newfun();
  static void newfun1();

   //...//

private:
   gph();

};

このクラスは静的ライブラリに組み込まれます

これで、静的関数にアクセスする必要がある Dll ができました。クラスAはDLLの一部です

私は言うC++メンバー関数を持っています

void A:: fun()
{

   gph::newfun() ;  //accessing a static function  : gives linker errors
}

一方、 fun() を静的にすると、リンカーエラーは発生しません。しかし、私は fun() を静的にしたくありません

4

2 に答える 2

0

呼び出し規約の問題だと思います。

次のコードを試してください。

class gph 
{
public:

  static void __cdecl newfun();
   //...//

};
于 2010-08-06T02:38:08.817 に答える
0

私が取り組んでいることのほとんどは、静的にリンクされたライブラリを扱っているため、この回答は当てはまらないかもしれませんが、問題の手がかりになるかもしれません。それと私が今見ているものに基づいて、最初に考えたのは、構築しているdllに静的ライブラリが含まれていることを確認することです。

未解決のシンボルは通常、署名が一致しないか、必要なライブラリが含まれていないことを意味します。コンパイラによって異なりますが、ほとんどの場合、ライブラリ ディレクトリ (コマンド ラインで -L で示される場合があります) と実際のリンク先ライブラリ (-l で示される場合があります) を指定する必要があります。

私は DLL をあまり使用しないので、DLL の理解は実行可能ファイルのビルドに似ています。ビルド時に動的リンクを使用すると、リンク先のライブラリのパスが実行可能ファイルに組み込まれるため、実行可能ファイルのサイズは小さくなりますが、リンク先のライブラリ パスに依存して移動しません。

したがって、DLL をビルドするときは、クラス gph の cpp をコンパイルし、その静的ライブラリを作成したことを確認してください。次に、クラス A で使用するときに、ヘッダーとリンクをライブラリに含めます。

于 2010-02-03T12:43:25.107 に答える