使用vs2008制作dll文件,生成动态链接库,采用显示加载,以下记录实现过程:
1.制作dll文件
- vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:MyDll。点击【OK】,【Next】,选择dll单选按钮,完成。
- vs2008会自动生成一些代码,不用管它。创建MyDll.h,代码如下
MyDll.h 为了提高可用性,写了可回带值的函数供参考
//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
-
// MyDll.cpp : Defines the exported functions for the DLL application. // #include "stdafx.h" #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") == 0){ result = "2000"; } *scadaId = result; printf("fun scadaId:%s\n", *scadaId); return true; }
- 编译一下,到工程的DEBUG目录,就可以找到MyDll.dll文件
2.创建测试程序
- vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:DllTest。点击【OK】,【Next】,选择console单选按钮,去掉“预编译头”默认勾选项,完成。
-
#include "windows.h" #include <iostream> void 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",a); printf("cimId:%s, scadaId:%s", cimId, scadaId); FreeLibrary(HDLL);//卸载MyDll.dll文件; }
- 编译一下
- 拷贝MyDll.dll文件到DllTest项目的Debug目录下
- 打开一个控制台(cmd),进入DllTest > Debug目录,运行DllTest.exe
- 输出结果:
fun scadaId : 1000 Max结果为12 cimId:aaaaaa, scadaId:1000
有疑问,见附件或给我发邮件。