DLL之种种

本文介绍Win32 DLL的实现方法,包括DLLMain函数定义及导出函数示例。此外,还探讨了如何使用MFC扩展DLL,并通过隐式与显式链接进行调用的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Win32Dll:

#define DLLEP __declspec(dllexport)
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
    return TRUE;
}

extern "C" DLLEP void Msg(void)
{
 MessageBox(NULL,"void(*)(void)"," ",MB_OK);

如果要使用mfc类

extern "C" __declspec(dllexport) int DoModalDlg1()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 Dlg1 dlg1;
 return dlg1.DoModal();
}

作为mfc扩展的dll

class AFX_EXT_CLASS CTipDlg : public CDialog

 

隐式调用

需考*.dll,*.lib,导入方式如下:
#pragma comment(lib,"Ex5_Win32dll.lib")
__declspec(dllimport) int Add(int x,int y);
__declspec(dllimport) void Msg(void);

显式调用

HINSTANCE hDLL;               // Handle to DLL

 hDLL = LoadLibrary("Ex_6MFCdll.dll");
 if (hDLL != NULL)
 {
   
    int (*fun)();
    fun = (int(*)())GetProcAddress(hDLL,"DoModalDlg1");
   
    if (!fun)
    {
     MessageBox("not load fun");
    // handle the error
   
    return ;
    }
    else
    {
    // call the function
    

     if(fun() == 1)
     {
      AfxMessageBox("ok");
     }
     else
     {
      AfxMessageBox("cancel");
     }
    
    }
    FreeLibrary(hDLL);
 }
 else
 {
  AfxMessageBox("no load dll");
 }

扩展类调用

1)
#include "TipDlg.h"
#pragma comment( lib, "Ex5_MFCExDll.lib" )

2)改dll的rescorse.h名include进来或者去掉emun={IDD=.....}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值