动态链接库DLL导出函数并导入使用
2013-08-06 11:16
477 查看
动态链接库DLL导出函数并导入使用
本文完全参考自《vs2008制作dll笔记,回带值样例》。
首先制作DLL文件,在vs2010中新建Win32控制台项目,选择DLL选项,简历头文件,源文件如下:
头文件:
源文件:
然后,创建测试样例,重新简历Win32控制台程序,选择控制台选项,建立测试代码:
编译生成Debug文件夹,讲之前生成的Dll文件拷贝到该Debug文件夹中,然后运行该测试样例。
DLL导出并导入生成函数需要注意几点:
extern "C" _declspec(dllexport)
typedef int (*pMax)(int a, int b);
typedef int (*pMin)(int a, int b);
typedef bool (*pcim2scada)(char* cimid, char** scada);
HINSTANCE HDLL;
HDLL = LoadLibrary(L"MyDll.dll"); // 加载动态链接库MyDll.dll文件;
pMax Max = (pMax)GetProcAddress(HDLL, "Max");
pMin Min = (pMin)GetProcAddress(HDLL, "Min");
pcim2scada cim2scada = (pcim2scada)GetProcAddress(HDLL, "cim2scada");
接下来,将学习如何用DLL导出C++类、对象,并进行导入使用。
本文完全参考自《vs2008制作dll笔记,回带值样例》。
首先制作DLL文件,在vs2010中新建Win32控制台项目,选择DLL选项,简历头文件,源文件如下:
头文件:
// MyDll.h extern "C" _declspec(dllexport) int Max(int a, int b); extern "C" _declspec(dllexport) int Min(int a, int b); extern "C" _declspec(dllexport) bool cim2scada(char* cimId, char** scadaId);
源文件:
// MyDll.cpp : Defines the exported functions for the DLL application. // #include "MyDll.h" #include <iostream> int Max(int a, int b) { if (a >= b) { return a; } else { return b; } } int Min(int a, int b) { if (a >= b) { return b; } else { return a; } } bool cim2scada(char* cimId, char** scadaId) { char* result; if (cimId == NULL) { printf("空指针!"); return false; } else if (strlen(cimId) == 0) { printf("cimId无值!"); return false; } if (strcmp(cimId, "aaaaaa") == 0) { result = "1000"; } else if (strcmp(cimId, "bbbbbb")) { result = "2000"; } *scadaId = result; printf("fun scadaId: %s \n", *scadaId); return true; }
然后,创建测试样例,重新简历Win32控制台程序,选择控制台选项,建立测试代码:
#include "windows.h" #include <iostream> int main() { typedef int (*pMax)(int a, int b); typedef int (*pMin)(int a, int b); typedef bool (*pcim2scada)(char* cimid, char** scada); HINSTANCE HDLL; HDLL = LoadLibrary(L"MyDll.dll"); // 加载动态链接库MyDll.dll文件; pMax Max = (pMax)GetProcAddress(HDLL, "Max"); pMin Min = (pMin)GetProcAddress(HDLL, "Min"); pcim2scada cim2scada = (pcim2scada)GetProcAddress(HDLL, "cim2scada"); int a = Max(5, 12); char* cimId = "aaaaaa"; char* scadaId = ""; bool b = cim2scada(cimId, &scadaId); printf("Max结果为%d\n", a); printf("cimId:%s, scadaId:%s\n", cimId, scadaId); FreeLibrary(HDLL); // 卸载MyDll.dll文件 }
编译生成Debug文件夹,讲之前生成的Dll文件拷贝到该Debug文件夹中,然后运行该测试样例。
DLL导出并导入生成函数需要注意几点:
extern "C" _declspec(dllexport)
typedef int (*pMax)(int a, int b);
typedef int (*pMin)(int a, int b);
typedef bool (*pcim2scada)(char* cimid, char** scada);
HINSTANCE HDLL;
HDLL = LoadLibrary(L"MyDll.dll"); // 加载动态链接库MyDll.dll文件;
pMax Max = (pMax)GetProcAddress(HDLL, "Max");
pMin Min = (pMin)GetProcAddress(HDLL, "Min");
pcim2scada cim2scada = (pcim2scada)GetProcAddress(HDLL, "cim2scada");
接下来,将学习如何用DLL导出C++类、对象,并进行导入使用。
相关文章推荐
- 工作问题积累(十九)使用dumpbin命令查看.dll(动态链接库)中导出函数
- 使用VC下的cl和link手工创建dll并实现函数导入
- C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程
- 使用汇编取得PE文件导入的DLL名称和函数名称
- 使用dumpbin命令查看dll导出函数及重定向输出到文件
- 应用程序调用dll组件,及dll组件之间的关系,dll中类及函数的导入导出;dll的导出方式和链接方式分析(一)
- C++静态库中使用_declspec(dllexport) 不能导出函数的问题
- dll导出中函数中使用CString类型的参数引发的ESP出错
- VS2008动态链接库(DLL)的创建与使用 - 导出类函数的DLL
- Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)
- 使用dumpbin命令查看DLL导出函数列表
- 动态链接库是如何建立的(3)如何查看到导出了那些函数?如何查看导入了哪些函数?
- C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
- DLL 函数导出和使用
- 动态链接库DLL导出函数名字改编问题
- 使用dumpbin命令查看dll导出函数及重定向输出到文件
- 使用dumpbin(vs自带工具)命令查看dll、lib,导出函数(copy)
- 动态链接库函数的调用(在lr中使用dll)
- 动态链接库使用.def导出一个c++类的函数
- C# winform 导出导入Excel/Doc 完整实例教程 使用Aspose.Cells.dll——第一篇