vs2008制作dll笔记,回带值样例

本文详细介绍了如何使用vs2008制作dll文件,包括创建dll文件、定义导出函数、编写cpp代码以及创建测试程序等步骤。通过实践操作,读者可以了解dll文件的制作流程,并掌握动态链接库的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用vs2008制作dll文件,生成动态链接库,采用显示加载,以下记录实现过程:

 

1.制作dll文件

  • vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:MyDll。点击【OK】,【Next】,选择dll单选按钮,完成。
  • vs2008会自动生成一些代码,不用管它。创建MyDll.h,代码如下
    MyDll.h 为了提高可用性,写了可回带值的函数供参考
    Cpp代码 复制代码  收藏代码
    1. //MyDLL.h    
    2. extern "C" _declspec(dllexportint Max(int a, int b);    
    3. extern "C" _declspec(dllexportint Min(int a, int b);    
    4. extern "C" _declspec(dllexportbool 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
  • Cpp代码 复制代码  收藏代码
    1. // MyDll.cpp : Defines the exported functions for the DLL application.   
    2. //   
    3.   
    4. #include "stdafx.h"   
    5. #include"MyDll.h"    
    6. #include <iostream>   
    7.   
    8. int Max(int a, int b)    
    9. {    
    10.     if(a>=b)return a;    
    11.     else    
    12.         return b;    
    13. }    
    14. int Min(int a, int b)    
    15. {    
    16.     if(a>=b)return b;    
    17.     else    
    18.         return a;    
    19. }     
    20.   
    21. bool cim2scada(char* cimId, char** scadaId){   
    22.     char *result;   
    23.     if(cimId == NULL){   
    24.         printf("空指针!");   
    25.         return false;   
    26.     }else if(strlen(cimId) == 0){   
    27.         printf("cimId无值!");   
    28.         return false;   
    29.     }   
    30.   
    31.     if(strcmp(cimId, "aaaaaa") == 0){   
    32.         result = "1000";   
    33.     }else if(strcmp(cimId, "bbbbbb") == 0){   
    34.         result = "2000";   
    35.     }   
    36.   
    37.     *scadaId = result;   
    38.     printf("fun scadaId:%s\n", *scadaId);   
    39.     return true;   
    40. }  
    // 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单选按钮,去掉“预编译头”默认勾选项,完成。
  • Cpp代码 复制代码  收藏代码
    1. #include "windows.h"   
    2. #include <iostream>   
    3.   
    4. void main(){   
    5.     typedef int(*pMax)(int a, int b);    
    6.     typedef int(*pMin)(int a, int b);    
    7.     typedef bool(*pcim2scada)(char* cimid, char** scada);   
    8.     HINSTANCE HDLL;    
    9.     HDLL=LoadLibrary(L"MyDll.dll");//加载动态链接库MyDll.dll文件;    
    10.     pMax Max=(pMax)GetProcAddress(HDLL,"Max");    
    11.     pMin Min=(pMin)GetProcAddress(HDLL,"Min");    
    12.     pcim2scada cim2scada=(pcim2scada)GetProcAddress(HDLL,"cim2scada");    
    13.     int a = Max(5, 12);    
    14.        
    15.     char cimId[] = "aaaaaa";   
    16.     char * scadaId = "";   
    17.     bool b = cim2scada(cimId, &scadaId);   
    18.   
    19.     printf("Max结果为%d",a);    
    20.     printf("cimId:%s, scadaId:%s", cimId, scadaId);   
    21.     FreeLibrary(HDLL);//卸载MyDll.dll文件;    
    22. }  
    #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
  • 输出结果:
    Cpp代码 复制代码  收藏代码
    1. fun scadaId : 1000   
    2. Max结果为12   
    3. cimId:aaaaaa, scadaId:1000  
    fun scadaId : 1000
    Max结果为12
    cimId:aaaaaa, scadaId:1000

有疑问,见附件或给我发邮件。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值