⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globaldllobjects.cpp

📁 Visual+C+++6[1].0实用教程代码 Visual+C+++6[1].0实用教程代码
💻 CPP
字号:
// GlobalDllObjects.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include <new.h>

#define GLOBALDLLOBJECTS_EXPORTS
#include "GlobalDllObjects.h"

// inter-process locking 
HANDLE g_hMutex = ::CreateMutex(NULL, FALSE, "CTest");

#pragma data_seg(".SHARDAT")
static char lpszMemory[sizeof(CTest)];
CTest* g_pTest = NULL;
int g_nClients = 0;
#pragma data_seg()

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//
//	Note!
//
//		If this DLL is dynamically linked against the MFC
//		DLLs, any functions exported from this DLL which
//		call into MFC must have the AFX_MANAGE_STATE macro
//		added at the very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

/////////////////////////////////////////////////////////////////////////////
// CGlobalDllObjectsApp

BEGIN_MESSAGE_MAP(CGlobalDllObjectsApp, CWinApp)
	//{{AFX_MSG_MAP(CGlobalDllObjectsApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGlobalDllObjectsApp construction

CGlobalDllObjectsApp::CGlobalDllObjectsApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CGlobalDllObjectsApp object

CGlobalDllObjectsApp theApp;

BOOL CGlobalDllObjectsApp::InitInstance() 
{
 ::WaitForSingleObject(g_hMutex,INFINITE);

 if (!g_pTest)
 {
  ::MessageBox(NULL,
   "CGlobalDllObjectsApp::InitInstance - "
   "constructing global CTest", 
   "CTest.DLL", MB_OK);

  g_pTest = ::new (lpszMemory) CTest;
  ASSERT(g_pTest);
 }
 
 g_nClients++;
 ::ReleaseMutex(g_hMutex);
	
 return CWinApp::InitInstance();
}

int CGlobalDllObjectsApp::ExitInstance() 
{
 ::WaitForSingleObject(g_hMutex,INFINITE);

 if (0 == --g_nClients)
 {

  MSG msg;

  ::PeekMessage(&msg, NULL, 
   WM_QUIT, WM_QUIT, PM_REMOVE);

  ::MessageBox(NULL,
   "CGlobalDllObjectsApp::ExitInstance - "
   "destructing global CTest", 
   "CTest.DLL", MB_OK);

  delete g_pTest;
  g_pTest = NULL;
 }

 ::ReleaseMutex(g_hMutex);
 ::CloseHandle(g_hMutex);
	
 return CWinApp::ExitInstance();
}

void EXPORTED_DLL_FUNCTION GetTestPtr(CTest*& rpTest)
{
 rpTest = g_pTest;
}

int EXPORTED_DLL_FUNCTION GetNbrOfClients()
{
 return g_nClients;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -