【问题标题】:Trouble using DLL使用 DLL 时遇到问题
【发布时间】: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


【解决方案1】:

将 DLL 添加到项目中是不够的,但您需要确保将 DLL 文件实际复制到可执行文件的输出目录中。

如果您在 C# 项目中添加了 DLL 文件,则可以设置“构建操作”=>“无”和“复制到输出目录”=>“如果较新则复制”。这应该确保您的 dll 位于正确的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多