gpt4 book ai didi

c# - 使用 DllImport 将非托管 dll 加载到托管应用程序中

转载 作者:太空狗 更新时间:2023-10-29 20:28:01 25 4
gpt4 key购买 nike

在我的项目中,我有一个非托管 native C++ dll 和一个 C# 应用程序。我正在尝试使用 DllImport 从非托管 dll 导入一个函数,但我一直收到 DllNotFoundException。

这是调用 DLL 的代码。

using System.Runtime.InteropServices;
namespace TestApp
{
public delegate void UpdateDelegate(string s);
class Program
{
[DllImport("CGPUnmanagedLibrary.dll")]
internal static extern int parse_raw_gsod_file(
[MarshalAs(UnmanagedType.LPStr)]
string filePath,
int minTemp,
UpdateDelegate callBack);

static void Main(string[] args)
{
UpdateDelegate myCallBack = new UpdateDelegate(Program.Report);
string path = @"C:\Creative Solutions\Projects\Clyde's Garden Planner\Frost Data Database\GSOD Data\GSOD_RAW_DATA\1992\gsod_1992.txt";
int result = parse_raw_gsod_file(path, 32, myCallBack);
Console.Write("Parse completed with exit code: " + result.ToString());
Console.ReadLine();
} // end main function

public static void Report(string msg)
{
Console.Write("Message is ");
Console.WriteLine(msg);
}

} // End class
} // end namespace

我尝试将 DLL 复制到应用程序输出目录,但仍然找不到它。我还尝试添加 DLL 项目作为引用,但我收到一个弹出窗口,提示无法添加。如何将非托管 DLL 正确链接到托管应用程序?

更新 - 这是完整的错误:

Unable to load DLL 'CGPUnmanagedLibrary': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

更新 2 - 我确信 DLL 与试图加载它的 .exe 位于同一目录中。这让我觉得 DLL 中存在未加载的依赖项。我只在 DLL 中使用基本的 C++ 库(字符串、数学、iostream 等)。有什么想法无法加载,为什么?

更新 3 - 使用 Dependency Walker 测试在 dependency walker 中加载我的非托管 C++ DLL 没有显示任何错误。我还尝试在 dependency walker 中打开我的可执行文件,它显示加载两个 DLL 时出错:GPSVC.DLL 和 IESHIMS.DLL - 没有任何意义,因为我只在我的代码中使用标准 c++ 库。我认为这可能与我有一个托管 C++/CLI DLL 试图加载非托管 DLL(我试图实现一些 C++/CLI 包装器)这一事实有关。不管怎样,我已经开始了一个新的 VS 解决方案并继续前进。看我的回答。

最佳答案

问题很可能不是您要加载的 DLL,而是它的(链接的)依赖项之一。在 DLL 上运行 depends.exe 或类似的实用程序,查看是否可以找到所有依赖项。误导性消息“找不到指定的模块”已经成为一个典型的烦恼(如果不是 FAQ Material !):它会让你认为你的 DLL 几乎所有时候都没有找到它的依赖项之一被发现。

关于c# - 使用 DllImport 将非托管 dll 加载到托管应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com