如何用c/c++编写和调用dll动态链接库。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用c/c++编写和调用dll动态链接库。相关的知识,希望对你有一定的参考价值。

请给出实例。谢谢。要详解

假设名为a.dll导出了函数int sum(int a, int b);
应这样调用:
HMODULE hLib = LoadLibrary("a.dll"); //加载a.dll,这里是假设a.dll与程序放在同一目录
typedef int (*funcSum)(int,int); // 定义函数指针
funcSum sum = (funcSum) GetProcAddress(hLib, "sum"); //获取函数地址
int ret = sum(1,2); //调用
FreeLibrary(hLib); //释放
参考技术A DLL函数导出方式有多种方式,这里介绍的是其中一种方式
头文件gptsqlite.h:
#ifndef _GPTSQLITE_H__
#define _GPTSQLITE_H__

#ifdef __cplusplus
extern "C"
#endif

#ifdef _EXPORTING
#define CLASS_DECLSPEC __declspec(dllexport)
#else
#define CLASS_DECLSPEC __declspec(dllimport)
#endif

CLASS_DECLSPEC int Add(int i, int j);

#undef _DLL_GPTSQLITE

#ifdef __cplusplus

#endif

#endif

 源文件gptsqlite.cpp
#include "StdAfx.h"
#define _EXPORTING

#include "gptsqlite.h"

CLASS_DECLSPEC int Add(int i, int j)

return i+j;

  调用函数

#include "stdafx.h"
#include<cstdlib>
#include <iostream>
#include "gptsqlite.h"
#pragma comment(lib, "dlldatabase.lib")
int _tmain(int argc, _TCHAR* argv[])

int i = Add(1, 2);
std::cout << i << std::endl;
system ("pause");
return 0;

C语言怎么使用动态链接库,如何创建?(高手进)

DLL和程序之间是什么关系求一简明扼要的解答 不甚感激(本人是初学者)

dll本质上也是可执行文件,里面其实是一些函数或者类的二进制形式, 供其它的程序来调用。
你的程序中调用了dll中的东西,编译后变成EXE文件,运行该exe文件就依赖dll了。

使用dll的目的,我认为在于节约内存,以及共享代码,而且在开发的时候更方便于模块化。
1. 对于10个g的游戏,如果完全编译才一个exe文件,那我们2g内存的电脑怎么跑这个游戏,所以做成小的exe,其它的部分做成DLL,当需要的时候才将dll装入内存使用即可。
2.共享是因为
参考技术A 用VisualStudio里提供的dll编译工具可以把C程序编译成dll。
在其他c程序里可以用LoadLibrary(dll名)加载。
加载之后就可以用里面的函数了。
先大致了解一下,需要详细用法可以找些相关的例子看看。
参考技术B 程序在需要时动态调用dll里写好的函数

够简洁吧~~

以上是关于如何用c/c++编写和调用dll动态链接库。的主要内容,如果未能解决你的问题,请参考以下文章

如何用VC编写dll文件

如何用VS2010编写动态链接库DLL

C语言怎么使用动态链接库,如何创建?(高手进)

如何用VS2010编写动态链接库DLL

如何用VS2010编写动态链接库DLL

用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!