DLL专题之动态连接库的静态调用(2)

我们还是先写一个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();
}

快点测试吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值