【发布时间】:2021-11-08 12:14:21
【问题描述】:
我对 C# 完全陌生。我正在尝试运行使用 C++ 编写的 DLL 的 C# 代码。 DLL文件是,
#include "pch.h"
#include <vector>
#include <iostream>
extern "C" __declspec(dllexport) void __cdecl analysis(double* values, int len)
{
using namespace std;
vector<int> ind(values, values + len);
int n = ind.size();
for (int i = 0; i < n; i++)
{
cout << ind[i] << endl;
}
}
还有 C# 代码,
using System.Runtime.InteropServices;
using System.Collections.Generic;
namespace Test_run
{
class Program
{
[DllImport("Test.dll")]
public static extern void analysis([MarshalAs(UnmanagedType.LPArray)] double[] values, int len);
static void Main(string[] args)
{
List<double> lst = new List<double>();
lst.Add(1.2);
lst.Add(2.3);
lst.Add(3.4);
analysis(lst.ToArray(), lst.Count);
}
}
}
两个文件单独编译。但是当我运行程序时,它会引发异常“无法加载 DLL “Test.dll”或其依赖项之一:找不到指定的模块。(0x8007007E)”。它们都在同一个解决方案中,并且 C# 项目添加了 DLL。
【问题讨论】:
-
您是否在项目中添加了对 DLL 的引用?如果没有,这可能会有所帮助。 Adding dependencies in your project
-
您的 Test.dll 必须与您的 C# 可执行文件位于同一文件夹中。您可以通过将 dll 作为项目添加到项目中或使用构建后操作来做到这一点。
-
旁注:
lst.ToArray()表示它正在处理副本,因此您永远看不到结果 -
我引用了 dll 项目。依赖设置也完成了。解决方案看起来像这样link。
-
@Charlieface,我知道这一点。这只是学习 DLL 导入的试运行。实际项目中的结果会输出到文件中。
标签: c# c++ visual-studio dll