基于VS的DLL的创建和使用

血泪教训:务必注意是生成realease版本的dll,免得其它软件/平台调用的时候查错查半天

A:创建目标dll文件

1.首先创建生成dll的项目,两种途径,基于MFC和基于Win32控制台应用程序(示例)

2.文件->新建->项目->win32控制台应用程序,程序类型选择DLL,勾选为空项目

3.菜单栏项目->添加头文件,myAPI.h代码如下

#ifndef _DLL_API 
#define _DLL_API _declspec(dllexport) 
#else 
#define _DLL_API _declspec(dllimport) 
#endif 
  
extern "C" _DLL_API int ADD(int a,int b);//自定义的函数接口

4.菜单栏项目->添加对应的源文件myAPI.cpp,函数定义,代码如下

#include "myAPI.h" 
  
int ADD(int a,int b)
{ 
  return a+b; 
}

5.编译通过,在相应工程名目录下的debug目录下会生成文件,后面只需要myAPI.dll和myAPI.lib

B:dll文件的调用的两种方式

    静态调用lib文件

   1.新建项目myTest,先编译,使项目具有debug目录,将myAPI.h存放在该目录

   2.将myAPI.lib文件放在与源文件和头文件相同的目录下

   3.将lib资源添加到项目中,在新项目的主函数中,添加代码

#pragma comment(lib,"myAPI.lib")

 4.调用的时候,直接调用函数就好了

cout<<ADD(3,5)<<endl; 

  动态调用dll文件

 一般而言,LoadLibrary函数就可以,但是如果存在当前dll调用外部dll的情况,很容易出现GetLastError为126或193的错误,

所以建议使用LoadLibraryEx函数,避免dll依赖错误 

         typedef int(*ADD)(int a,int b);  
         HMODULE hdll = LoadLibraryEx(L"myAPI.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);//vs2010  将__TEXT置换为_T

         if (hdll != NULL)
         {
                 ADD  myADD= (ADD)GetProcAddress(hdll, "ADD");
                 if (RecordCheck != NULL)
                 {
                       int result=  myADD(3,5);
                 }
         }
		 else
		 {
			 //MessageBox(0,L"Load Dll Fail",L"Warnning",0);
		 }
         FreeLibrary(hdll); 

关于dll加载的三种方式

1.LoadLibrary  一般是动态加载DLL时(你并不需要对应的头文件,和LIB) 

2.#pragma comment 一般是静态加载DLL时(对应的头文件、DLL,和LIB缺一不可,并且生产的EXE没有找到DLL文件就会导致“应用程序初始化失败”) 

3.#import指令用于从一个类型库中结合信息。该类型库的内容被转换为C++类,主要用于描述COM界面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值