zoukankan      html  css  js  c++  java
  • C++调用DLL

    问题描述:

            C++调用DLL接口

    问题解决:

           1、声明提取DLL函数

    typedef int (_stdcall *plib_ver)(unsigned int *nVer);
       typedef int (_stdcall * pdes_encrypt)(unsigned char *szOut,unsigned char *szIn , unsigned int inlen,unsigned char *key,unsigned int keylen);
    
       typedef int (_stdcall * pdes_decrypt)(unsigned char *szOut,unsigned char *szIn , unsigned int inlen,unsigned char *key,unsigned int keylen);
     

    extern plib_ver  lib_ver;
       extern pdes_encrypt  des_encrypt ; 
       extern pdes_decrypt   des_decrypt ; 

        其中_stdcall这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的(__fastcall 的前面部分由ecx,edx传), 函数调用在返回前要由被调用者清理堆栈。extern 声明DLL接口函数地址,在其他文件中实现,参见第二条:获取DLL函数地址

    在使用中未声明_stdcall 出现如下的错误信息:

    0_1327~1

       2.  获取DLL函数地址

    int init(char *path)
    {
        lib=LoadLibrary(path);
    
        if(lib)
        {
            lib_ver       = (plib_ver)GetProcAddress(lib,("lib_ver"));
            des_encrypt   = (pdes_encrypt)GetProcAddress(lib,("des_encrypt"));
            des_decrypt   = (pdes_decrypt)GetProcAddress(lib,("des_decrypt"));                
    
            if(NULL == lib_ver  ||  NULL == des_encrypt   ||  NULL == des_decrypt )    
            {            
                return 1;
            }
        }
        return 0;
    }

    LoadLibrary载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源

    GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

    3、使用DLL函数

    int open(int port,int baud)
    {
        char path[]="C:\Users\Administrator\Desktop\JT500 RFID\JT500RFID\rfid\rfid\MasterRD.dll";
        int ret=init(path);
        ret&=rf_init_com(port,baud);
        return ret;
    }

    4、释放DLL

    int close()
    {
        int ret=rf_ClosePort();
        if (lib!=NULL)
        {
            ret&=FreeLibrary(lib);
            lib=NULL;
        }
        return ret;
    }
  • 相关阅读:
    springboot 无法访问静态资源
    webrtc源码阅读理解一
    c++ include的顺序重要吗?
    简说yuv
    i420 转 nv21
    ffmpeg mp4 转 yuv、 y4m转yuv、mp4转y4m && ffplay 播放y4m、yuv
    mysql 查询json字符串条件
    Webpack4.X中sourcemap的配置 详解
    webpack如何打包生成的map文件不生效?
    vue中使用setInterval,移入暂停,移出继续
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3598906.html
Copyright © 2011-2022 走看看