use*_*747 1 c++ dll winapi compilation
我正在创建我的第一个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
Run Code Online (Sandbox Code Playgroud)
我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
C++编译器可能非常挑剔您声明调用约定和存储类信息的顺序(可视导出__declspec).AFAIK,VC++需要在存储类之后出现调用约定.例如:
namespace MyTest
{
LRESULT CLASSINDLL_CLASS_DECL CALLBACK TestWndProc( HWND hwnd, UINT msg, LPARAM lParam, WPARAM wParam );
// ...
}
Run Code Online (Sandbox Code Playgroud)
另一方面,C++ Builder 2007和MinGW-GCC-4.5.2并不关心这一点 - 两种形式都被接受.