动态链接库基础(笔记)

    dll使用有2种方式,一种是显式链接,一种是隐式链接。说得直白一些,显示链接需要在程序代码中调用dll文件,而隐式链接只需要包含相应的头文件。
    下面是一个简单的win32程序调用函数的例子,实现了2个数相加的功能,调用变量和类的方法也差不多。
    首先,无论显示隐式,dll项目都是一样的。新建一个win32 Dynamic-Link Library工程,命名为DLLsample好了,工程中原有的代码不去管它,一些关键字的解释很多地方都有详细的说明,先在Dllsample.h头文件中添加函数声明,extern "C" __declspec(dllexport) int add(int a,int b); (extern "C"貌似可以省略?),在cpp中实现这个函数,return (a+b);
OK,编译完成,很简单吧。
    再说怎么调用,先说显式链接。新建一个"hello world"控制台工程,把刚才dll工程下的Dllsample.dll拷贝到该工程的Debug目录下,添加下列代码
#include "stdafx.h"
#include <windows.h>
typedef (/*_stdcall*/ *DllAddMath)(int,int);
int main(int argc, char* argv[])
{
    HINSTANCE hdll = ::LoadLibrary("Dllsample.dll");          //载入dll
    //获取dll的函数指针,并强制转换为先前typedef的函数指针
    DllAddMath dllMath=(DllAddMath)::GetProcAddress(hdll,"add"); //找到DLL中add函数的地址,我是这么理解的。。。
    int c=0;
    c=dllMath(1,2);
    printf("1+2=%d",c);
    ::FreeLibrary(hdll);//释放DLL
    return 0;
}
运行下试试。

    然后是隐式链接,同样新建一个"hello world"控制台工程,把之前dll工程下的Dllsample.dll拷贝到该工程的Debug目录下,把Dllsample.h和Dllsample.lib拷贝到该工程的根目录下。其次,在hello world工程中添加Dllsample.h头文件,cpp文件中包含该头文件,在project->setting->link->Object/library modules中添加Dllsample.lib,以下是代码:
#include "Dllsample.h"
int main(int argc, char* argv[])
{
    int c=0;
    c=add(1,2);
    printf("1+2=%d",c);
    return 0;
}
That's all

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值