1

私は過去2日間、同様の質問からの回答を検索してコードに実装しましたが、ほとんど成功しませんでした。外部の.dll(Windows)であるAPIがあり、APIを参照するためにヘッダーファイルが.cppファイルにインクルードされています。

ただし、この問題が発生した場合、何をしても、.hファイルのこの行を参照する未解決の外部シンボルが常に表示されます。はい、Googleを使用して、見つけた回答をコードに変更しましたが、成功しませんでした。

Foo.h

Class Foo {
    public:
        static Foo* Interface_Get(char* dllfilename);

Foo.cpp

// I declare this just underneath the #include "Foo.h" header
Foo *foo = 0;

私のメイン関数の中で、私はそれをこれとして宣言します(他のいくつかの関数と一緒に)。

//This has already been created and both Header and .dll are in the same directory.
Foo::Interface_Get("bar.dll"); 

そして、私はこのエラーを受け取ります

error LNK2019: unresolved external symbol 
    "public: static class Foo * __cdecl Foo::Interface_Get(char *)"

私は知っていることをすべて試しました(これは私の最初の.dll作成経験です)私は痛々しいほど明白な何かを見逃していると感じていますが、私の人生ではそれを見ることができません。

Foo.cpp全体

#include "Foo.h"
Foo* Foo::Interface_Get(char* dllfilename); //May not be redeclared outside class error

Foo* foo = 0;

bool Frame()
{
if (foo->Key_Down(DIK_ESCAPE))
    return false;   
return true;
}


INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
foo->Interface_Get("bar.dll");

foo->System_SetState(grSTATE_FRAME, Frame);

foo->System_SetState(grSTATE_WINDOWED, true);

foo->System_SetState(grSTATE_KEYBOARD, true);

foo->System_Initiate();

foo->System_Start();

foo->System_Shutdown();

foo->Inferface_Release();

return 0;
}
4

2 に答える 2

2

この質問は一般的な問題を説明します、そしてあなたの場合それは(おそらく)以下の組み合わせです:

  • (おそらく)関数の実装を忘れている
  • 忘却__declspec(dllexport)
  • ライブラリとのリンクを忘れている
于 2013-01-03T09:42:45.543 に答える
1

Interface_Get(char* dllfilename);まだ行っていない場合は、関数定義を提供する必要があります。

これは関数を再度宣言するだけです。以下の形式のような関数を提供する必要があります。{}

Foo* Foo::Interface_Get(char* dllfilename); //May not be redeclared outside class error

Foo.cpp

Foo* Foo::Interface_Get(char* dllfilename)
{
  //....
  return new Foo();
}
于 2013-01-03T09:40:41.143 に答える