如何用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动态链接库。的主要内容,如果未能解决你的问题,请参考以下文章