如何在Visual Studio 2015中用C++创建DLL并在C项目中调用
在Visual Studio 2015中用C++创建DLL并供C项目调用的完整指南
我之前帮不少开发者解决过这个问题,核心其实就是处理好C和C++的**名字修饰(Name Mangling)**差异,下面一步步来,保证你能跑通整个流程:
第一步:创建C++ DLL项目
- 打开Visual Studio 2015,点击「文件」→「新建」→「项目」
- 在模板里选择「Visual C++」→「Windows」→「Win32项目」,给项目起个名字(比如
MyCppDLL),点击确定 - 在Win32应用程序向导里,选择「DLL」,勾选「空项目」,然后点击完成
第二步:编写DLL的导出代码
这一步是关键,必须用extern "C"告诉C++编译器按照C的规则生成函数名,否则C项目会找不到函数入口。
1. 添加头文件MyCppDLL.h
右键项目→「添加」→「头文件」,输入代码:
#ifndef MYCPPDLL_H #define MYCPPDLL_H // 告诉C++编译器,下面的代码用C的规则编译 #ifdef __cplusplus extern "C" { #endif // __declspec(dllexport) 标记要导出到DLL的函数 __declspec(dllexport) int Add(int a, int b); __declspec(dllexport) void PrintMessage(const char* msg); #ifdef __cplusplus } #endif #endif // MYCPPDLL_H
2. 添加源文件MyCppDLL.cpp
右键项目→「添加」→「源文件」,输入代码:
#include "MyCppDLL.h" #include <iostream> int Add(int a, int b) { return a + b; } void PrintMessage(const char* msg) { std::cout << "[C++ DLL输出]:" << msg << std::endl; }
第三步:编译生成DLL
- 选择对应的平台(x86或x64,后续C项目必须和这个一致)
- 点击「生成」→「生成解决方案」
- 编译完成后,在项目的
Debug或Release目录下,你会得到三个关键文件:MyCppDLL.dll:实际的动态链接库文件MyCppDLL.lib:导入库(C项目编译时需要)MyCppDLL.h:函数声明头文件
第四步:创建C项目并调用DLL
- 新建一个「Win32控制台应用程序」,命名为
MyCProject,选择「空项目」完成创建 - 配置C项目的依赖:
- 将
MyCppDLL.h复制到C项目的目录下,或者右键C项目→「属性」→「VC++目录」→「包含目录」,添加DLL头文件所在的路径 - 将
MyCppDLL.lib复制到C项目目录下,或者在「VC++目录」→「库目录」添加.lib所在路径;然后在「链接器」→「输入」→「附加依赖项」里添加MyCppDLL.lib
- 将
- 添加C源文件
main.c,输入代码:
#include "MyCppDLL.h" #include <stdio.h> int main() { int sum = Add(10, 20); printf("C项目调用C++ DLL的Add函数结果:%d\n", sum); PrintMessage("我是来自C项目的调用请求!"); return 0; }
- 最后,将
MyCppDLL.dll复制到C项目的Debug或Release目录下(和生成的.exe同目录),然后编译运行即可。
常见问题排查
- 运行时报错「找不到MyCppDLL.dll」:确保DLL文件和C项目的.exe在同一目录,或者放到系统PATH路径下
- 编译C项目时提示「无法解析的外部符号」:检查是否添加了
extern "C",以及.lib文件是否正确配置,平台(x86/x64)是否和DLL一致 - 函数参数/返回值异常:确保C项目里的函数声明和DLL里的完全一致(比如参数类型、数量)
内容的提问来源于stack exchange,提问作者Kiva




