• 一个简单的DLL生成和测试


    DLL文件内容:

    SKLDll.h

    #ifndef _SKLDLL_H_
    #define _SKLDLL_H_

    #ifndef DLL_API
    #define DLL_API extern "C" __declspec(dllexport)
    #else
    #define DLL_API extern "C" __declspec(dllimport)
    #endif

    DLL_API int add(int a,int b);

    #endif//_DLLMAIN_DLL_H_

    SKLDll.cpp

    #include "SKLDll.h"
    #include<windows.h>

    BOOL APIENTRY DllMain(
    HANDLE hModule,
    DWORD ul_reason_for_call,
    LPVOID lpReserved
    )
    {
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    MessageBox(NULL,"DLL_PROCESS_ATTACH", "Information", MB_OK | MB_ICONINFORMATION);
    break;
    case DLL_THREAD_ATTACH:
    break;
    case DLL_PROCESS_DETACH:
    MessageBox(NULL, "DLL_PROCESS_DETACH", "Information", MB_OK | MB_ICONINFORMATION);
    break;
    case DLL_THREAD_DETACH:
    break;
    }
    return TRUE;
    }

    int add(int a, int b)
    {
    return (a + b);
    }

    DLL显示(动态加载)调用代码:

    #include<windows>

    typedef int(*lpAddFun)(int, int);//宏定义函数指针类型 ,定义一个与add函数参数类型和返回类型相同的指针函数
    int DllTest(){
    HINSTANCE hDll;//dll句柄
    lpAddFun addFun;//函数指针
    hDll = LoadLibrary("SKLDll.dll");//通过win32的api函数 动态加载dll模块,并将dll模块句柄赋给了hdll;
    if (hDll != NULL){
    addFun = (lpAddFun)GetProcAddress(hDll, "add");//通过api函数将dll模块中函数add的地址赋给addfun
    if (addFun != NULL){
    int result = addFun(2, 3);
    printf("%d ", result);
    }
    FreeLibrary(hDll);
    }
    else
    {
    printf("%s", "DLL load failed");
    }
    return 0;
    }

     int main()

    {

    cout<<"come in main"<<endl;

    DllTest();

    }

    运行结果:

    先输出come in main 然后弹出DLL_PROCESS_ATTACH消息框,然后输出5,最后弹出DLL_PROCESS_DETACH消息框;

  • 相关阅读:
    curl post
    mysql存储引擎
    梳理版本控制器:SVN和Git比较
    详细说明php的4中开源框架(TP,CI,Laravel,Yii)
    五种常见的 PHP 设计模式
    php+ajax实现跨域单点登录
    laravel
    Gitlab配置webhooks实现自动化部署
    linux CentOs7 安装gitlab
    身份证验证
  • 原文地址:https://www.cnblogs.com/KunLunSu/p/7435593.html
Copyright © 2020-2023  润新知