刚开始学习DLL,
我按照《windows核心编程》上的例子,新建了一个Workspace“exp”,又在其中加入两个Project“lib”(dll工程)和“exp”(exe的工程)。设置exp的dependency为dll。然后在exp.cpp中调用lib中的输出变量和函数。但是:
【1】有些地方不明白(见注释)?
【2】还有编译时出现警告,什么原因?
【3】将DLL和EXE连接起来共有几种方法?都在什么情况下使用?举一二例。
【4】dllimport和dllexport的意义到底什么?我看了MSDN也没有明白。
警告信息如下:
--------------------Configuration: lib - Win32 Debug--------------------
Compiling...
lib.cpp
f:\yml\exp\lib.h(6) : warning C4005: 'MYAPI' : macro redefinition
        f:\yml\exp\lib.cpp(6) : see previous definition of 'MYAPI'
f:\yml\exp\lib.h(12) : error C2537: 'c' : illegal linkage specification
f:\yml\exp\lib.h(13) : error C2537: 'c' : illegal linkage specification
f:\yml\exp\lib.cpp(9) : warning C4273: 'g_nResult' : inconsistent dll linkage.  dllexport assumed.
f:\yml\exp\lib.cpp(12) : warning C4273: 'Add' : inconsistent dll linkage.  dllexport assumed.
Error executing cl.exe.exp.exe - 2 error(s), 3 warning(s)全部源代码如下:
/*********************************************************
lib.h
*********************************************************/#ifdef __cplusplus
#define MYAPI extern "c" __declspec(dllimport)//是extern"c"作怪么?
#else
#define MYAPI __declspec(dllimport)
#endifMYAPI int g_nResult;
MYAPI int Add(int nLeft, int nRight);
/*********************************************************
lib.cpp
*********************************************************/
#define MYAPI extern "c" __declspec(dllexport)#include "lib.h"
int g_nResult = 0;int Add(int nLeft, int nRight)
{
return g_nResult = (nLeft + nRight);
}/*********************************************************
exp.cpp
*********************************************************/#include <windows.h>
#include "lib.h"int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
int nLeft = 7657;
int nRight =50;
TCHAR sz[100];
wsprintf(sz, TEXT("%d + %d = %d"), nLeft, nRight, Add(nLeft, nRight));
MessageBox(NULL, sz, TEXT("计算"),MB_OK);
wsprintf(sz, TEXT("g_nResult = %d"), g_nResult);
MessageBox(NULL, sz, TEXT("结果"),MB_OK);
return 0;
}