You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用C++编写的Test.dll运行时报无法加载DLL错误如何解决

问题排查解决步骤
  • 确认DLL已复制到C#程序运行目录
    C#程序运行时默认从自身所在的bin/Debug或bin/Release目录下搜索依赖DLL,你可以右键C#项目中添加的Test.dll文件,在属性面板中将「复制到输出目录」选项设置为「如果较新则复制」,也可以在C++项目的生成后事件中添加命令,编译完成后自动将DLL拷贝到C#项目的输出目录。
  • 检查两个项目的目标平台架构是否匹配
    C#项目的目标平台必须和C++ DLL的编译架构完全一致:
    • 如果C++ DLL编译为x64版本,C#项目的目标平台要设为x64,不能使用x86或开启了「首选32位」的AnyCPU
    • 你可以分别右键两个项目打开属性页,C#项目在「生成」标签页修改目标平台,C++项目在「高级」标签页修改目标平台,两边保持统一即可。
  • 排查C++ DLL的依赖项缺失
    该报错也可能是Test.dll自身依赖的组件找不到导致的:
    • 不要将Debug模式编译的C++ DLL给Release模式的C#项目使用,Debug版C++ DLL依赖Debug版本的VC运行库,多数环境下默认没有安装
    • 可以将C++项目的「代码生成」选项中的运行库设置为/MT(Release模式)或/MTd(Debug模式),静态编译运行库避免外部依赖
    • 也可以安装对应版本的VC++可再发行包来解决运行库缺失问题。
  • 验证DLL导出函数名是否正确
    你可以使用VS自带的dumpbin /exports Test.dll命令查看DLL的导出函数列表,确认导出函数名确实是analysis,如果导出名被修改,可以在DllImport特性中通过EntryPoint参数指定实际的导出函数名。

注意:你当前的C代码存在逻辑错误,你将传入的double类型数组直接赋值给int类型的vector,会直接读取double的二进制数据作为int值,输出结果和你预期的数值不一致,加载问题解决后需要将C代码中的vector<int>改为vector<double>,或者将C#代码中的传参改为int数组。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:36:04