我正在创建我的第一个DLL。我只有一个单例类&一个LRESULT CALLBACK函数,我将在DLL&导入我的一个项目。我的MSVC ++项目体系结构由DLLMain.cpp文件(未更改)组成,该文件定义了单例类& LRESULT功能&一个实现LRESULT函数的cpp文件。
我的问题:项目没有编译。我有2个编译错误,我不明白什么是完全错误&如何解决它。
1> c:\ users \ testcreatedll \ dlltest.h(15):错误C2059:语法错误:'__ declspec(dllexport)'
1> c:\ users \ testcreatedll \ dlltest.h(39):错误C2065:'TestWndProc':未声明的标识符
我的标题文件:
#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 :(得分:5)
C ++编译器可能非常挑剔你声明调用约定和存储类信息的顺序(使用__declspec
可视导出)。 AFAIK,VC ++需要调用约定在存储类之后出现。例如:
namespace MyTest
{
LRESULT CLASSINDLL_CLASS_DECL CALLBACK TestWndProc( HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam );
// ...
}
另一方面,C ++ Builder 2007和MinGW-GCC-4.5.2并不关心这两种形式 -