首页 > 解决方案 > 使用 DLL 时遇到问题

问题描述

我对 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。

标签: c#c++visual-studiodll

解决方案


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

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

在此处输入图像描述


推荐阅读