标签(空格分隔): 学习笔记
创建动态库需要生成.dll和.lib两个文件 创建方法: 第一步:文件->新建->项目->win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:DLL 附加项目:空项目 第二步:在创建的dll工程中编写自己需要编译成dll的函数cpp和头文件h
第三步:建立dll源文件dllmain.cpp,用来定义应用程序的入口点
// dllmain.cpp : 定义 DLL 应用程序的入口点。#include <windows.h>BOOL APIENTRY DllMain(HMODULE hModule, DWord ul_reason_for_call, LPVOID lPReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}第四步,建立源文件Source.def 添加->新建->visual C++ ->模块定义文件(.def) - 在此文件第一行引号中填你的项目名称即可,EXPORTS下面列出要生成的函数名称 格式:“名称 @序号”)
LIBRARY "DLLGenerator"EXPORTS Add @1 Mul @2第五步:点击编译生成解决方案,显示生成完成。此时debug目录下就会出现.dll文件和.lib文件 第六步:将.h文件.dll文件.lib文件拷贝到同一个文件夹中。之后将这个文件夹就可以发送给任何人使用你编写的函数了。
和配置一般使用库的配置方法一样(如opencv),这里不做详细介绍,直接贴图; 第一步:新建工程,准备调用上面生成的dll文件 第二步:配置环境时,将vc++目录的包含目录,库目录分别包含上面生成的文件夹(.h,.dll,.lib)
第三步:连接器中加入lib文件
下面就可以自由的使用dll文件中的任何函数了。
由于很多时候我们没有lib文件和h文件,这时候上述方法就不能使用了,但是我们可以使用以下方式。
#include<iostream>#include<Windows.h>#include<time.h>typedef int(*Dllfun)(int *, int);using namespace std;int main(){ Dllfun maopao1; HINSTANCE hdll; hdll = LoadLibrary("E://matthewCode//C&C++//DLLtest//DLLtest//Debug//dllOnlytest.dll"); if (hdll == NULL) { FreeLibrary(hdll); } maopao1 = (Dllfun)GetProcAddress(hdll, "maopao"); if (maopao1 == NULL) { FreeLibrary(hdll); } int a[10]; srand(time(0)); for (int i = 0; i<10; i++) a[i] = rand() % 50; maopao1(a, 10); for (int i = 0; i<10; i++) cout << a[i] << endl; FreeLibrary(hdll);}有时候我们调用的dll文件同时也调用了其他的dll文件,这时候我们还能顺利的调用这个dll文件吗?答案是肯定的。下面我们创建一个dll_1实现一个加法函数,在dll_2中我们调用dll_1中的加法函数,并产生一个新的乘法函数。上述两个过程都同第一小节的步骤得到dll文件,lib文件,h文件。
//dll_1int Add(int a, int b){ return a + b;} 同样的,我们心间一个工程3,分别调用dll_1,和dll_2的函数,环境的配置在这里省略不写(dll_1和dll_2的lib,h,dll文件都需要配置)。 工程3的代码如下:
输入1,2返回值都是3说明所有dll的调用都测试通过。
新闻热点
疑难解答