2011-08-13 18 views
1

私は最初の単純DLLを作成しようとしています。私はクラス(それはシングルトンクラス)&私はDLLで宣言するウィンドウプロシージャ関数を持って&私のプロジェクトで後でインポートしたい。私のIDEはMicrosoft Visual C++ 2010です&私のプロジェクトはWin32 DLLです&私はMSVC++のデフォルトのDLLテンプレートを使用しています(プロジェクトの作成時にすべてのデフォルトファイルを作成する方法を知っています)。私の最初のDLLには、理解できない多くのコンパイルエラーがあります

しかし、私は間違っていることを理解できないこれらのコンパイルエラーが発生していますか?

1> C:のVisual C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.h(15)\ \ユーザー\ soribo \ Dropboxの\ C++プログラミング:エラーC2059:構文エラー: '__declspec(dllimportの')
1> c:¥users¥soribo¥dropbox¥C++プログラミング¥ビジュアルC++プログラミング¥testcreatedll¥testcreatedll¥dlltest.h(39):エラーC2065: 'TestWndProc':宣言されていない識別子
1> c:\ users \ soribo \ dropbox \ C++プログラミング\視覚C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.cpp(7):警告C4273: 'testStaticVar':一貫性のないDLLリンケージ
1> c:\ users \ soribo \ dropbox \ C++プログラミング\ Visual C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.h(21):前を参照してください"C:\ users \ soribo \ dropbox \ C++プログラミング\ Visual C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.cpp(7):エラーC2491:" public:static bool MyTest :: TestClass :: testStaticVarの定義は
" 'MyTest :: TestClass :: testStaticVar':dllimport静的データメンバーの定義は許可されていません。
1:c:\ users \ soribo \ dropbox \ C++プログラミング\ Visual C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.cpp(8):警告C4273: 'インスタンス':一貫性のないdllリンケージ
1:c:¥users¥soribo¥dropbox¥C++プログラミング¥ビジュアルC++プログラミング¥testcreatedll¥testcreatedll¥dlltest.h(35):前の定義の 'private:static MyTest: :TestClass * MyTest :: TestClass :: instance '
1> c:\ users \ soribo \ dropbox \ C++プログラミング\ Visual C++プログラミング\ testcreatedll \ testcreatedll \ dlltest.cpp(8 ):エラーC2491: 'のMyTest :: TestClassを::インスタンス':DLLIMPORT静的データメンバーの定義は許可されていない

私の単純なヘッダファイル:

#ifndef DLLTEST_H 
#define DLLTEST_H 

#include <windows.h> 

// This is from a tutorial I am following 
#ifdef _CLASSINDLL 
#define CLASSINDLL_CLASS_DECL __declspec(dllexport) 
#else 
#define CLASSINDLL_CLASS_DECL __declspec(dllimport) 
#endif 

namespace MyTest 
{ 
    LRESULT CALLBACK CLASSINDLL_CLASS_DECL TestWndProc(HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam); 

    class CLASSINDLL_CLASS_DECL TestClass 
    { 
     // Singleton class 
     public: 
      static bool testStaticVar; 

      static TestClass* getInstance() 
      { 
       if (instance == NULL) { instance = new TestClass(); } 
       return instance; 
      } 

      void add() 
      { 
       myMember++; 
      } 

     private: 
      static TestClass* instance; 
      WNDPROC myProc; 
      int myMember; 

      TestClass() : myMember(0) { myProc = (WNDPROC)&TestWndProc; } 
      ~TestClass()    {} 

    }; 
} 

#endif // DLLTEST_H 

私の簡単なCPPファイル:

#include "stdafx.h" 
#include "DLLTest.h" 

namespace MyTest 
{ 
    // Create/Initialise? Class Static variables 
    bool TestClass::testStaticVar = false; 
    TestClass* TestClass::instance = NULL; 

    LRESULT CALLBACK TestWndProc(HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam) 
    { 
     switch (msg) 
     { 
      case WM_CREATE: 
      { 

      } 
      break; 
      default: 
      break; 
     } 

     return DefWindowProc(hwnd, msg, wParam, lParam); 
    } 

} 

答えて

0

_CLASSINDLLプリプロセッサ定義がありません。プロジェクト - >プロパティ - > C/C++ - >プリプロセッサ - >プリプロセッサ定義で追加します。

+0

コンパイルエラーが多く取り除かれましたが、最初の2つのエラーがまだ発生しています。静的なクラス変数と関係があります。たぶん私はdllで静的なvarsを使用することはできません? – user593747

+0

どのようなエラー?最初の2つのエラーは静的変数ではなくクラス定義に関連しています。 –

関連する問題