龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC学习:全局共享变量的困惑

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
近日写程序,让全局共享变量给害苦了,现将结果公布出来,不希望有人步我后尘。 先总结经验:全局共享变量一定要在定义时初始化,否则无效。 下面写两行代码进行验证(Visual

  近日写程序,让全局共享变量给害苦了,现将结果公布出来,不希望有人步我后尘。

  先总结经验:全局共享变量一定要在定义时初始化,否则无效。

  下面写两行代码进行验证(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];

精彩图集

赞助商链接