通过Microsoft Visual Studio将.c源文件编译成.dll动态链接库

手里有一个.c源文件,想用VS2017将其编译成.dll,直接在VS2017里打开源文件无法执行编译,因为VS2017不能编译杂项文件。

首先,新建-项目-Visual C++-Windows桌面,选择“动态链接库(DLL)”,给定项目名称和存放位置,点确定。然后在“解决方案资源管理器窗口”,右击“源文件”,选择“添加-现有项”,导入你的.c源文件。

然后在“解决方案资源管理器窗口”,右击,如果出现以下报错:

是否忘记了向源中添加"#include "pch.h""

这是因为项目默认有预编译头文件pch.h,如果不需要它,可以右击项目名称-属性,在“配置”里选择“所有配置”,在“C/C++-预编译头”里选择“不使用预编译头”;还要注意编译文件的位数(x32还是x64),在“平台”和“配置管理器”中进行修改,然后点确定。

回到“解决方案资源管理器窗口”,右击pch.cpp-移除,右击pch.h-移除,右击项目名称-清理,最后右击项目名称-生成。如果上面报错仍然出现,重启Visual Studio,再右击项目名称-生成。

右击项目名称-在文件资源管理器中打开文件夹,可以打开项目所在文件夹:如果选择了32位,则在Debug文件夹里能找到生成的.dll文件;如果选择了64位,在x64文件夹里的debug文件夹,可以看到编译生成的.dll文件。生成的.dll文件名称与项目同名。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用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放进去之后就解决了。 我们成功的在自己的工程里调用了外部的类 可以看到我们成功的在自己的工程里调用了外部的类。
Visual Studio 2022 中,可以按照以下步骤将多个头文件和源文件形成动态链接库: 1. 创建一个新的 DLL 项目,选择 C/C++ 作为项目语言。 2. 在项目中添加所有的头文件和源文件。可以通过右键单击项目,选择“添加”->“现有项”来添加文件。 3. 配置项目属性,使其生成动态链接库。在项目属性中选择“配置属性”->“常规”,将“配置类型”选项设置为“动态库 (.dll)”。 4. 对于每个源文件,可以选择是将其编译为 DLL 的一部分,还是将其编译为静态库的一部分。在源文件的属性中,可以通过设置“配置属性”->“常规”->“项目中的对象文件”来控制编译选项。 5. 编译和链接项目。在 Visual Studio 中,可以选择“生成”->“生成解决方案”来编译和链接项目。 6. 将生成的 DLL 文件拷贝到您的应用程序中。可以通过在应用程序中设置“配置属性”->“链接器”->“输入”->“附加依赖项”选项来链接 DLL 文件。 具体操作可以参考以下示例代码: ``` // mylib.h #ifndef MYLIB_H #define MYLIB_H #ifdef MYLIB_EXPORTS #define MYLIB_API __declspec(dllexport) #else #define MYLIB_API __declspec(dllimport) #endif MYLIB_API int add(int a, int b); #endif // mylib.c #include "mylib.h" MYLIB_API int add(int a, int b) { return a + b; } // main.c #include <stdio.h> #include "mylib.h" int main() { int res = add(1, 2); printf("1 + 2 = %d\n", res); return 0; } ``` 在 Visual Studio 中创建一个 DLL 项目,将 mylib.h 和 mylib.c 添加到项目中,并将配置类型设置为“动态库 (.dll)”。在 mylib.h 中定义 MYLIB_EXPORTS 宏,这将用于确定是否导出函数。在 main.c 中包含 mylib.h 头文件,使用 add 函数进行计算。 编译和链接项目后,将生成 mylib.dll 文件。将 mylib.dll 文件复制到 main.c 所在的文件夹中,并运行可执行文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值