我们还是先写一个DLL吧,在这个DLL里我们将函数与变量都导出来.然后,我们看如何调用他们.
好,首先写一个Win32的DLL吧:
头文件:
#ifndef _DLLVARIANT_DLL_H_
#define _DLLVARIANT_DLL_H_
#include "windows.h"
extern LPSTR g_pstrMsg;
extern LPSTR g_pstrTitle;
void ShowMessage( );
#endif//_DLLVARIANT_DLL_H_
实现文件:
#include "DllVariant.h"
LPSTR g_pstrMsg;
LPSTR g_pstrTitle;
void ShowMessage()
{
if ( g_pstrTitle && g_pstrMsg )
{
MessageBox( NULL, g_pstrMsg, g_pstrTitle, MB_OK |MB_ICONINFORMATION );
}
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//变量初始化
g_pstrMsg = NULL;
g_pstrTitle = NULL;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
g_pstrMsg = NULL;
g_pstrTitle = NULL;
break;
}
return TRUE;
}
再在.DEF文件里导出他们:
;DllVariant,CONSTANT 是过时的用法,推荐用DATA,这里只是举例而已
LIBRARY DllVariant
EXPORTS
g_pstrMsg DATA
g_pstrTitle CONSTANT
ShowMessage @ 1
好了,现在,我们就来调用他们了.
/*------------------------------------------------------------*/
动态连接库的静态调用变量和函数
你先把DLL的lib文件和dll文件拷贝到当前目录下。然后就做如下调用。
我们的例子是DllVariant.dll和DllVariant.lib
/*------------------------------------------------------------*/
#pragma comment(lib,"DllVariant.lib")
extern LPSTR __declspec(dllimport) g_pstrMsg;
extern LPSTR __declspec(dllimport) g_pstrTitle;
void __declspec(dllimport) ShowMessage( );
void CDllDlg::OnBtnDllvariant()
{
// TODO: Add your control notification handler code here
g_pstrMsg = "Hello World!";
g_pstrTitle = "Information";
ShowMessage();
}
快点测试吧!