VC学习:全局共享变量的困惑
近日写程序,让全局共享变量给害苦了,现将结果公布出来,不希望有人步我后尘。
先总结经验:全局共享变量一定要在定义时初始化,否则无效。
下面写两行代码进行验证(Visual Studio .NET 2003 + Windows Servers 2003):
////////////////////////////
//main.c
#include
#include "resource.h"
__declspec(dllexport) void Test(HWND hWnd);
//主窗体回调函数
LRESULT CALLBACK MainProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_COMMAND:
{
if(LOWORD(wParam)==IDOK)
{
Test(hWnd);
return 1;
}
else if(LOWORD(wParam)== IDCANCEL)
{
EndDialog(hWnd,0);
return 1;
}
}
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance,ID_DLG,NULL,MainProc);
return 0;
}
///////////////////////////////////////
//dll.c
#include
#include
//定义全局共享变量
#pragma data_seg(".Shared")
static int haveinit=0;//初始化
static int noinit; //未初始化
#pragma data_seg()
#pragma comment(linker, "/section:.Shared,rws")
__declspec(dllexport) LRESULT CALLBACK TestProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
CWPSTRUCT *msg = (CWPSTRUCT *) lParam;
if (msg->message==WM_NULL)
{
char Text[50];
- 上一篇:VC学习:虚拟按键的总结及示例
- 下一篇:VC实现的MSN Messager钩子程序