使用vs2008制做dll文件,生成动态连接库

1.制做dll文件     vs2008中,File > New Project > Other Language > Win32 > Win32 Console Application. 输入项目名称:MyDll。点击【OK】,【Next】,选择dll单选按钮,完成。     vs2008会自动生成一些代码,不用管它。建立MyDll.h,代码以下     MyDll.h 为了提升可用性,写了可回带值的函数供参考     Cpp代码  收藏代码         //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代码  收藏代码         // 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代码  收藏代码         #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代码  收藏代码         fun scadaId : 1000          Max结果为12          cimId:aaaaaa, scadaId:1000  ===================================================================================================== 这里总结一下vs2008下建立dll并使用dll导出函数的方法,固然方法还有不少,找出一个本身比较习惯的方法就好! 一:生成DLL 1:建立DLL工程       文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也能够)       填写项目名称MyDLL->肯定->下一步->DLL(附加选项 对空项目打钩)->完成。       到这里DLL工程就建立完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。       MyDLL.cpp内容以下:     #include <iostream>     using namespace std;     #include "MyDLL.h"          int Add(int &a,int &b)     {         return a+b;      }       MyDLL.h内容以下:      #pragma once     #define DLL_EXPORT __declspec(dllexport)     extern "C" DLL_EXPORT int Add(int &a,int &b);      点击生成,则dll文件就生成了,vs2008不能直接生成lib文件,这个时候就须要咱们在创建dll工程的时候 再新建一个def文件,默认生成而后从新生成就可以获得lib文件了 2:调用DLL文件导出的接口函数        vs2008这个IDE很是好用,咱们这里玩一下,在上面建立的DLL工程中,再新建一个项目来直接调用DLL导出函数。        右键解决方案->添加->新建项目->创建一个空的常规工程 testMyDLL,下面新建两个文件testMyDLL.cpp和testMyDLL.h testMyDLL.cpp内容以下:     #include "testMyDLL.h"     #pragma comment(lib,"..\\debug\\MyDLL.lib")     #include <iostream>     using namespace std;          int main()     {         int a =3;         int b =2;         cout<<Add(a,b)<<endl;              getchar();     } testMyDLL.h内容以下:     #pragma once     #define DLL_EXPORT __declspec(dllexport)          extern "C" DLL_EXPORT int Add(int &a,int &b); 这里须要注意testMyDLL.cpp文件中调用lib的这句话:     #pragma comment(lib,"..\\debug\\MyDLL.lib") 这里须要指明lib所在的文件夹,固然咱们也能够在生成dll的MyDLL工程中,指定lib和dll文件的输出路径,直接到testMyDLL工程下。 注:dll文件的操做有不少方法,待之后丰富。。。
相关文章
相关标签/搜索