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

    今天试验了一下C++利用windows api调用dll。dll代码是用delphi编译出来的,调用的代码是C++。

    先看delphi写的dll

    代码
    unit Unit1;

    interface

    function Add(ANumOne, ANumTwo: Integer): Integer; stdcall;

    implementation

    function Add(ANumOne, ANumTwo: Integer): Integer; stdcall;
    begin
    Result :
    = ANumOne + ANumTwo;
    end;

    exports
    Add;

    end.

    再看C++调用

    代码
    #include <iostream>
    #include
    <windows.h>


    typedef
    int (*AddFunc)(int, int)__stdcall;

    int main(int argc, char **argv)
    {
    HINSTANCE handle;
    handle
    = LoadLibrary("d:\Test.dll");
    AddFunc func
    = (AddFunc)GetProcAddress(handle, "Add");
    std::cout
    <<func(3,4)<<std::endl;
    return 0;
    }

    其实编译好的二进制文件例如exe和dll在运用的时候都会映射到内存中去。因此只要在这段映射的内存中找到需要调用的函数的地址,

    并且知道函数的调用形式就可以用函数指针加以调用。

    在delphi代码中,我们可以看到Add函数带有两个参数,并且标明了是stdcall的调用形式,export标明了导出函数是Add

    在C++代码中,我们用到了两个api函数

    • 第一个是LoadLibrary函数,它的作用是将dll映射到内存,并且返回句柄
    • 第二个函数是GetProcAddress,它的作用是返回函数指针,注意一定要利用先验知识进行正确的类型转换, 不然会调用失败。
  • 相关阅读:
    传统IO总结
    关于JAVA垃圾回收的一些小tips
    一个爬喜马拉雅音频的例子
    return研究
    Java基础知识-java.util.concurrent包下常见类的使用
    <a>链接的四个伪类顺序
    前端面试题
    setTimeout的作用以及setTimeout延时0毫秒的作用
    闭包的使用
    JavaScript typeof obj === ‘object’ 这样写有什么问题
  • 原文地址:https://www.cnblogs.com/lovelyxia/p/1909660.html
Copyright © 2011-2022 走看看