求助关于dll中共享数据问题

来源:百度知道 编辑:UC知道 时间:2024/06/12 18:26:46
我写了个dll,我想让其中的b_begin变量共享到所有用此dll的进程中,编译此dll没问题,但是在调用此dll的cpp中如何声明这个变量?
我在调用的cpp里面写了extern BOOL b_begin;但是编译时候仍报fatal error LNK1120: 1 个无法解析的外部命令:
请问高手是为什么?
dll程序如下:
#pragma data_seg(".shared")
HHOOK mhook=NULL;
HINSTANCE hIstance=NULL;
BOOL b_begin=FALSE;
#pragma data_seg()
#pragma comment(linker,"/section:.shared,rws")

LRESULT WINAPI KeyProc(int code,WPARAM wParam,LPARAM lParam)
{
if ((0x40000000&lParam)&&wParam==VK_SPACE)
{
b_begin=!b_begin;
}
return 0;
}

1. 我估计你的b_begin可能根本没有导出。要么写一个def文件,或者声明b_begin的时候写成__declspec(dllexport) BOOL b_begin.

2. 编译以后会生成一个lib文件,使用这个dll的工程需要链接这个lib文件才能引用dll的导出。(当然也可以GetProcAddress动态导入,但是效率比境低)。

3. 工程使用b_begin的话需要声明为extern __declspec(dllimport) BOOL b_begin

使用LoadLibrary可以:

HINSTANCE instance = LoadLibrary("YourDLL.dll");
BOOL b_begin = (BOOL)GetProcAddress(instance, "b_begin");