由于每次使用动态链接库的时候都要重新去查资料,查调用方式,有些烦躁,本人抽点时间在此做个总结,希望可以对需要的朋友有所帮助。

1,显式加载方式加载动态链接库

简单易懂,随掉随用

(1)          将dll考到当前工作目录,或者使用GetModuleFileName函数获取当前执行目录得到相对路径,亦或者使用绝对路径进行加载。

(2)          得到dll实例句柄

HMODULE LoadLibrary( LPCTSTR lpFileName )

( 3 ) 获取dll中导出函数的地址

FARPROC GetProcAddress( HMODULE hModule,LPCSTR lpProcName )

Ex:typedef int (*ADDPROC)( int a, int b )

ADDPROC Add=(ADDPROC)GetProcAddress(hinst,”add”);

(4)FreeLibrary()调用结束释放实例。

2         隐式加载方式加载动态链接库

一:基本调用流程

(1)      使用_declspec(dllexport)导出函数

比如

_declspec(dllexport) int add( int a,  int b  )

添_stdcall extern c可有效解决名字改编问题

_stdcall extern c _declspec(dllexport) int add( int a,  int b  )

(2)  将dll文件考到当前工程,并连接lib文件

Vc6可以通过link连接,vs系列可以通过依赖库连接

或者使用一种通用的方式加载,通过路径加载

#pragma comment(lib,"../SDK/Sadp.lib")

(3)在调用处用extern做外部定义声明

Ex:extern int add( int a , int b )

或者_declspec(dllimport) int add( int a,  int b  )

二:模块定义文件(可有效解决名字改编问题)参考网络通信库

Library xxx.dll

EXPORTS

Add。。。。

3         显式加载和隐式加载的比较

个人比较崇尚显示加载两个原因:

1,        随掉随用,易懂,并且不会因为某一个导出函数的调用的失败导致程序的崩溃

2,        节省内存,调用结束直接释放实例,而隐式加载从程序开始运行就一直伴随着程序的整个过程,当dll比较多的时候很浪费内存。

visual c++ 动态链接库调用总结的更多相关文章

  1. C/C++程序通过动态链接库调用MATLAB程序

    C/C++程序通过动态链接库调用MATLAB程序 1 MATLAB编译器设置 需要设定对应的C++编译器才能编译.m文件生成可供C++调用的库文件. 在MATLAB命令行输入:mex –setup:然 ...

  2. Linux下c++通过动态链接库调用类

    http://hi.baidu.com/ablenavy/item/b498901c6826bbf587ad4e33 Linux下的动态链接库叫so,即Shared Object,共享对象.一些函数就 ...

  3. 使用visual studio 2015调用阿里云oss .net sdk 2.2的putobject接口抛出outofmemory异常

    问题描述: 使用阿里云oss .net sdk 2.2版本,使用putobject接口上传文件时,抛出outofmemory异常. 原因分析: 上传时,用于准备上传的数据缓冲区内存分配失败.与应用软件 ...

  4. Visual Studio/Eclipse调用 JBoss5中的WebService

    1. HelloWebService.java package com.xx.webservices; import javax.jws.WebMethod; import javax.jws.Web ...

  5. Visual C# 2015调用SnmpSharpNet库实现简单的SNMP元素查询

    一开始调研发现有几个SNMP的库, 一个是net-SNMP,这个好像是linux用的多 一个是微软自己的WinSNMP,这个没有例子,不太好操作 一个是SnmpSharpNet,这个有些例子比较好, ...

  6. vs 2010调用matlab dll显示窗口核心代码

    matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...

  7. vs 连接过程报错 dll 分析 ------- DLL动态链接库

    1:编译成功,说明代码没有问题了2:连接报错,说明 exe 在查找dll 的入口地址过程,找不到合适的信息,这些信息保存在 dll 对应的 *.lib 文件里面  说明:exe如果生成成功了lib 这 ...

  8. LoadRunner 调用dll方法

    本文主要介绍简单DLL的编写方法及在LoadRunner中局部调用与全局调用DLL方法. 1.动态链接库的编写 在Visual C++6.0开发环境下,打开FileNewProject选项,可以选择W ...

  9. .NET 7 AOT 的使用以及 .NET 与 Go 互相调用

    目录 背景 C# 部分 环境要求 创建一个控制台项目 体验 AOT 编译 C# 调用库函数 减少体积 C# 导出函数 C# 调用 C# 生成的 AOT Golang 部分 安装 GCC Golang ...

随机推荐

  1. 《Javascript语言精粹》 读书笔记

    1 6种值被当做假:false.null.undefined.空字符串''.数字0.数字NaN,其他所有值都为真,包括"false" 2 typeof有6种值,分别是'number ...

  2. js中document.write()使用方法

    <script>             var hrf = window.location.href;           if(hrf.indexOf('change')>0){ ...

  3. sql server 更新表,每天的数据分固定批次设置批次号sql

    按表中的字段 UpdateTime 按每天进行编号,每天的编号都从1开始编号,并附带表的主键 cid,把数据存入临时表中 WITH temp AS (SELECT cid,updatetime, RO ...

  4. Linux C/C++计划Shell命令大杂烩(1)

    1, 请参见发行信息 cat /etc/issue 2, 查看内核版本号 uname -r 查看内核版本号 uname -p 查看处理器类型32bit/64bit uname -n 查看网络主机名(o ...

  5. Socket 学习(三).5 UDP 的弱点

    前面 讲到了,udp 传输文本的例子,发现 udp 确实 比tcp 高效一些,现在我用来传输文件,问题果然来了,结果发现 他不能一次 传输大于 64K的东西! 那么 我自然想到了 切包,多次发送,再合 ...

  6. C语言练手自己编写学生成绩管理系统

    #include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...

  7. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t

    nginx源代码分析数据结构篇(两) 双链表ngx_queue_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...

  8. svg的自述

    svg可缩放矢量图形(Scalable Vector Graphics). SVG 使用 XML 格式定义图像. SVG 是使用 XML 来描述二维图形和绘图程序的语言. 什么是SVG? SVG 指可 ...

  9. Linq to Sql : 三种事务处理方式

    原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).M ...

  10. JSLint是一个JavaScript的代码质量工具

    JSLint是一个JavaScript的代码质量工具 可能都或多或少的知道JSLint是一个JavaScript的代码质量工具,一个JavaScript语法检查器和校验器,它能分析JavaScript ...