zoukankan      html  css  js  c++  java
  • 使用code::blocks编译windows的dll链接库

    因为机子上没有安装Visual Studio,所以找到了一种通过code::blocks编译dll的方式,踩到的坑是code::blocks默认的compiler是32位的,这样编译出的dll也是32位的,编译64位的需要借助MinGW-w64的toolchain。

    为code::blocks配置外部MinGW-w64编译器可以参考Compile 64-bit under windows with MinGW-w64

    使用code::blocks创建一个dll的工程,如下图:

    go和next到下一步:

    选择我们上面配置的编译器:

    Finsh完成,此时已经建好main.h和main.cpp文件,这里我实现了一个add函数的dll库,代码如下:

    #ifndef __MAIN_H__
    #define __MAIN_H__
    
    #include <windows.h>
    
    /*  To use this exported function of dll, include this header
     *  in your project.
     */
    
    #ifdef BUILD_DLL
        #define DLL_EXPORT __declspec(dllexport)
    #else
        #define DLL_EXPORT __declspec(dllimport)
    #endif
    
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    int DLL_EXPORT add(int a, int b);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif // __MAIN_H__

    main.cpp

    // a sample exported function
    
    int DLL_EXPORT add(int a, int b)
    {
        return a + b;
    }
    
    extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
        switch (fdwReason)
        {
            case DLL_PROCESS_ATTACH:
                // attach to process
                // return FALSE to fail DLL load
                break;
    
            case DLL_PROCESS_DETACH:
                // detach from process
                break;
    
            case DLL_THREAD_ATTACH:
                // attach to thread
                break;
    
            case DLL_THREAD_DETACH:
                // detach from thread
                break;
        }
        return TRUE; // succesful
    }

    build之后就可以生成我们想要的dll库。这里刚开始没发现compiler位数问题,编译出的是32位的dll,在x86_64平台上用会报错,通过使用Cygwin命令行仿真工具的file命令可以查看dll的位数,这个是比较简单的判断dll位数的方式。

     这里在安装MingGW-w64 toolchain时也遇到一个问题,就是使用上述链接提供的MinGW下载链接下载的mingw-w64-installer.exe安装时会报"cannot download repository.list"的错误,所以又找了下发现这个错误还挺多人碰到过,官方没有修复而是给出编译好的版本,可以在这里下载,下载完解压出来就可以使用了。

    关于使用编译好的dll库可以参考:Windows环境下创建并使用动态链接库(CodeBlocks版),另外还可以使用code::blocks编译和使用静态库:CodeBlocks创建静态链接库和使用

  • 相关阅读:
    MIRO校验过程
    SAP中寄售处理
    物料BOM和生产订单BOM的区别
    sap 中怎样把非限制库存转为销售订单库存?
    SAP MM Consignment 寄售库存
    SAP 库存关联表信息
    SAP 物料主数据屏幕增强
    __defineGetter__ && __defineSetter__
    mongodb(分片)
    mongodb(副本集)
  • 原文地址:https://www.cnblogs.com/glensblog/p/10412806.html
Copyright © 2011-2022 走看看