vs2008制作dll笔记

本文参考http://leongod.iteye.com/blog/1104575

 

 

使用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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值