dll.h
#ifdef _cplusplus
#define EXPORT extern "C" _declspec(dllexport)
#else
#define EXPORT _declspec(dllexport)
#endif
EXPORT VOID CALLBACK SetString(PSTR);
EXPORT VOID CALLBACK GetString(PSTR);
|
上一篇文章已经说过了,基本没有什么不同,关键是实现文件:
#include <windows.h>
#include "dll1.h"
#pragma data_seg("shared")
TCHAR buffer[30] = "我难道不是一个中国人?";
#pragma data_seg()
#pragma comment(linker, "/SECTION:shared,RWS")
int WINAPI DllMain(HINSTANCE hInstance,
DWORD fdwReason,
PVOID pvReserved) {
return TRUE;
}
EXPORT VOID CALLBACK SetString(PSTR str) {
strcpy(buffer, str);
}
EXPORT VOID CALLBACK GetString(PSTR str) {
strcpy(str, buffer);
}
|
作者的解释:
第一个#pragma叙述建立数据段,这里命名为shared。您可以将这段命名为任何一个您喜欢的名字。在这里的#pragma叙述之后的所有初始化了的变量都放在shared数据段中。第二个#pragma叙述标示段的结束。对变量进行专门的初始化是很重要的,否则编译器将把它们放在普通的未初始化数据段中而不是放在shared中。
连结器必须知道有一个「shared」共享数据段。在「Project Settings」对话框选择「Link」页面卷标。选中「STRLIB」时在「Project Options」字段(在Release和Debug设定中均可),包含下面的连结叙述:
/SECTION:shared,RWS
字母RWS表示段具有读、写和共享属性。或者,您也可以直接用DLL原始码指定连结选项,就像我们在STRLIB.C那样:
#pragma comment(linker,"/SECTION:shared,RWS")
|
阅读(676) | 评论(0) | 转发(0) |