You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Visual Studio 2015中用C++创建DLL并在C项目中调用

在Visual Studio 2015中用C++创建DLL并供C项目调用的完整指南

我之前帮不少开发者解决过这个问题,核心其实就是处理好C和C++的**名字修饰(Name Mangling)**差异,下面一步步来,保证你能跑通整个流程:

第一步:创建C++ DLL项目

  1. 打开Visual Studio 2015,点击「文件」→「新建」→「项目」
  2. 在模板里选择「Visual C++」→「Windows」→「Win32项目」,给项目起个名字(比如MyCppDLL),点击确定
  3. 在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

  1. 选择对应的平台(x86或x64,后续C项目必须和这个一致)
  2. 点击「生成」→「生成解决方案」
  3. 编译完成后,在项目的DebugRelease目录下,你会得到三个关键文件:
    • MyCppDLL.dll:实际的动态链接库文件
    • MyCppDLL.lib:导入库(C项目编译时需要)
    • MyCppDLL.h:函数声明头文件

第四步:创建C项目并调用DLL

  1. 新建一个「Win32控制台应用程序」,命名为MyCProject,选择「空项目」完成创建
  2. 配置C项目的依赖:
    • MyCppDLL.h复制到C项目的目录下,或者右键C项目→「属性」→「VC++目录」→「包含目录」,添加DLL头文件所在的路径
    • MyCppDLL.lib复制到C项目目录下,或者在「VC++目录」→「库目录」添加.lib所在路径;然后在「链接器」→「输入」→「附加依赖项」里添加MyCppDLL.lib
  3. 添加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;
}
  1. 最后,将MyCppDLL.dll复制到C项目的DebugRelease目录下(和生成的.exe同目录),然后编译运行即可。

常见问题排查

  • 运行时报错「找不到MyCppDLL.dll」:确保DLL文件和C项目的.exe在同一目录,或者放到系统PATH路径下
  • 编译C项目时提示「无法解析的外部符号」:检查是否添加了extern "C",以及.lib文件是否正确配置,平台(x86/x64)是否和DLL一致
  • 函数参数/返回值异常:确保C项目里的函数声明和DLL里的完全一致(比如参数类型、数量)

内容的提问来源于stack exchange,提问作者Kiva

火山引擎 最新活动