vs2008制作dll笔记,回带值样例
来源:互联网 发布:淘宝全球购官网直购 编辑:程序博客网 时间:2024/05/18 03:12
使用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.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;
- }
// 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文件;
- }
#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
fun scadaId : 1000Max结果为12cimId:aaaaaa, scadaId:1000
有疑问,见附件或给我发邮件。
- vs2008制作dll笔记,回带值样例
- VS2008 制作类的DLL
- VS2008 制作类的DLL
- Visual C#(VS2008)制作DLL文件
- Visual C#(VS2008)制作DLL文件
- Visual C#(VS2008)制作DLL文件并使用DLL文件
- vs2008下win32 dll封装笔记
- vs2008下win32 dll封装笔记
- 使用vs2008制作dll文件,生成动态链接库
- 使用vs2008制作dll文件,生成动态链接库
- 使用vs2008制作dll文件,生成动态链接库
- 使用vs2008制作dll文件,生成动态链接库
- 使用vs2008制作dll文件,生成动态链接库
- VS2008 DLL
- 制作DLL
- Dll制作
- VS2008 生成DLL加载DLL
- VS2008导入dll
- launcher 类分析
- HANDLE、进程ID和HINSTANCE的区别
- portal名册解析
- Oracle中打印和if的使用
- android google directions
- vs2008制作dll笔记,回带值样例
- 反向神经网络的缺点
- iPad vs Windows 8 平板【视屏】
- GridView 分页代码 排序代码 分页排序 隔行换色
- 什么是 C Runtime 函数库
- 2011-9-14 21:31:07
- winform判断设计模式还是运行时模式
- 本人荣升为“eoe·Android 高级研究院\Android Framework研究”的斑猪(jalymo)
- 每天一学——VAB RANGE