VS中dll的使用

本文主要按照该博客实践:
C++基础:动态链接库调用方法总结
http://blog.csdn.net/crich_moon/article/details/6039939

创建动态链接库文件的主要步骤为:
1.创建MFC的dll
2.创建.h文件,声明导出的函数,如:

extern "C" __declspec(dllexport) int _stdcall ADD(int a, int b);

3.创建.c文件,实现声明的函数,如:

extern "C" __declspec(dllexport) int _stdcall ADD(int a, int b){
    return a + b;
}
  1. 修改.def文件,在文末”;“前添加函数名: ADD
    5.编译通过即可得到dll文件和lib文件

静态调用dll的主要步骤为:
1. 创建空的控制台应用程序, 将上面得到的.dll, .lib, .h文件放在该工程的相应目录下。(在我之后的试验中发现.h文件可以不需要)
2. 添加.h文件:(test.h)

#pragma comment(lib,"MFCDLLTEST.lib") //告诉编译器DLL相对应的lib文件所在路径和文件名

extern "C" _declspec(dllimport) int _stdcall Add(int a,int b);//声明导入函数
  1. 添加cpp文件:(main.cpp)
#include "test.h"
#include <iostream>
using namespace std;

int main()
{

cout<<Add_new(10,3);

return 0;

}

动态调用ll的主要步骤:
1.创建空的控制台应用程序, 将上面得到的.dll, .lib, .h文件放在该工程的相应目录下。(在我之后的实验中发现动态调用其实只需要dll文件。)
2.编写.cpp文件。
3.编译运行。

cpp文件代码如下:

#include "windows.h"
#include <iostream>
using namespace std;
typedef int(__stdcall *IpAddFun)(int, int);
int main() {
    HINSTANCE HDll;
    IpAddFun ip;
    HDll = LoadLibrary(L"MFCDLLTEST.dll");
    if (HDll){
        ip = (IpAddFun)GetProcAddress(HDll,"ADD");
        if (ip) {
            int result = (*ip)(2, 3);
            cout << "2 + 3 = " << result << endl;

        }
    }
    FreeLibrary(HDll);
    int a;
    cin >> a;
    return 0;
}

有关 extern “C”的用法,见:
http://www.jianshu.com/p/5d2eeeb93590
有关 __stdcall 和 __cdecl的区别,见:
http://www.cnblogs.com/zhangchaoyang/articles/2725189.html
有关.def文件格式和作用,见:
http://www.360doc.com/content/14/0518/15/7378868_378761402.shtml
有关dumpbin的使用,见:
http://www.cnblogs.com/dyllove98/archive/2013/06/20/3146922.html
有关Run-Time Check Failure #0的报错,原因是我要调用的动态库里的函数是C函数,所以在函数指针定义是要如下格式:

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

也就是在函数指针前面加上__stdcall就可以了。详细可见:
http://blog.sina.com.cn/s/blog_52ff416e0100dtkh.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值