二、 VS2015显示加载Dll及常用的创建方式

本文详细介绍了如何在VS2015中创建DLL动态库,包括新建Dll项目、添加源文件、定义.def文件并编译生成dll。接着,文章讲解了显示加载DLL的方式,创建测试项目,通过LoadLibrary和GetProcAddress函数调用DLL中的函数。注意,显示加载允许在需要时加载DLL,减少资源占用,但仅能导出全局函数。

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

创建DLL动态库

1、新建Dll项目

文件->新建->项目->Visual C++ win32控制台程序(填写项目名MyDll)->下一步->(应用程序类型)勾选:DLL,(附加选项)勾选:空项目->完成

2、添加新建项MyDll.cpp

因显示加载dll时仅需要用到项目生成的dll文件,所以这里可以不使用.h文件。

#include <iostream>

int __stdcall Add(int a, int b)
{
    return a + b;
}

void __stdcall myPrint(const char* s)
{
    std::cout << s << std::endl;
}

__stdcall是Microsoft对编译器的一个扩展,是一种用于调用Win32 API函数的调用约定。使用__stdcall约定时函数栈的清理由被调用方执行,因此可以解决不同的编译器生成函数栈方式不同的问题,也就是使用该约定生成的dll可以跨编译器使用。另外如果导出函数需要给win32汇编使用或者作为系统回调函数使用,使用__stdcall声明方式是非常重要的。

3、添加.def文件(模块定义文件)

使用VS2015编译和调用动态链接库dll 1. 首先建工程,选择dll,记得勾上“导出符号” 后面不用自己搞那些宏定义会省事很多。 建立工程myDll,记得勾上“导出符号” 类型选择dll 2. IDE自动生成的代码已经把整个架构弄好了,其中和项目同名的.h和.cpp文件就是我们自己写代码的地方了。我想写的dll是导出一个类,在这里我就直接在它自动生成的CmyDll类上面改了。 myDll.h myDll.cpp 在mydll.h和mydll.cpp中给类添加成员函数 //mydll.h class MYDLL_API CmyDll { public: CmyDll(void); // TODO: 在此添加您的方法。 int myFunction(int a, int b); }; //mydll.cpp int CmyDll::myFunction(int a, int b) { return a*b; } 3.编译的时候我选择了release,这里可以用默认的debug也行 在mydll.h和mydll.cpp中给类添加成员函数 最后生成解决方案后产生的mydll.lib和mydll.dll就是我们需要的进制文件了。lib文件是编译是要用的,而dll是调用这个库的程序运行时需要的。 调用dll 1.重新建立一个工程 这回选择普通的控制台程序就行了。我建了个名为myDllCall的工程。 2.把库的头文件include进来,以及连接lib文件 其中 include进来的 myDll.h 和 **#pragma comment()**的lib根据自己的路径写。 #include "stdafx.h" #include "../../myDll/myDll/myDll.h" //头文件 #pragma comment(lib,"../../myDll/Release/myDll.lib") //调用自己写的外部库 #include int main() { CmyDll mydll; int a, b; std::cin >> a >> b; std::cout << mydll.myFunction(a, b) <> a >> b; std::cout << mydll.myFunction(a, b) << std::endl; return 0; } 3.dll放到可执行文件同一目录下面 刚刚的代码直接编译没问题,运行会报错. 直接编译没问题,运行会报错 原因是dll要和生成的可执行文件在同一个目录下,我把mydll.dll放进去之后就解决了。 我们成功的在自己的工程里调用了外部的类 可以看到我们成功的在自己的工程里调用了外部的类。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值