看流星社区

 找回密码
 注册账号
查看: 2047|回复: 0

dll的写法

[复制链接]

该用户从未签到

发表于 2017-6-2 13:22:45 | 显示全部楼层 |阅读模式
dll中的main.cpp

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
HMODULE m_gModule;
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
                m_gModule = (HMODULE)hModule;
                break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
                break;
        }
        return TRUE;
}

_declspec(dllexport) void ExportFunc(LPCTSTR pszContent)
{
        char sz[MAX_PATH];
        ::GetModuleFileNameA(m_gModule, sz, MAX_PATH);
        ::MessageBoxA(NULL, pszContent, strrchr(sz, '\\')+1, MB_OK);
}



调用 时main.cpp

#include <Windows.h>
#include "DllDemo.h"

#pragma comment(lib, "DllDemo.lib")

void main()
{
        ExportFunc("aaa");
}







动态调用方法
在生成DLL上写xx.def
EXPORTS
        ExportFunc





#include <Windows.h>


//声明函数原型
typedef void (*PFNEXPORTFUNC)(LPCTSTR);

int main(int argc, char* argv[])
{
        //加载DLL
        HMODULE hModule = :oadLibrary("DllDemo.dll");
        if (hModule != NULL)
        {
                //取得ProcFunc的地址
                PFNEXPORTFUNC mExportFunc = (PFNEXPORTFUNC)GetProcAddress(hModule, "ExportFunc");
                if (mExportFunc != NULL)
                {
                        mExportFunc("DFA");
                }
                //卸载库
                ::FreeLibrary(hModule);
        }

        return 0;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-29 18:27

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表