C++ DLL 和 C# 应用程序 WPF:System.DllNotFoundException

Posted

技术标签:

【中文标题】C++ DLL 和 C# 应用程序 WPF:System.DllNotFoundException【英文标题】:C++ DLL and C# applications WPF: System.DllNotFoundException 【发布时间】:2016-01-03 21:45:53 【问题描述】:

我正在编写一个依赖 C++ DLL 来管理设备的 C#/WPF 应用程序。 目前我正在测试根据该线程中的代码在它们之间设置回调接口:Howto implement callback interface from unmanaged DLL to .net app?(您可以在下面看到我的版本) C#/WPF 项目正在编译为 Debug x64。 C++ DLL 编译为 Release x64。我还将 DLL 添加到项目目录和解决方案中作为参考。 C# 项目编译并运行,直到它到达函数“SetCallback”。然后,Visual Studio 将继续告诉我“System.DllNotFoundException”。这对我来说都是陌生的领域,因此非常感谢您的帮助。

C#代码:

namespace SomeNameSpace
public partial class Class1

    private delegate int Callback(string text);
    private Callback m_Instance;
    public Class1()
    
         m_Instance = new Callback(Handler);
    
    private int Handler(string txt)
    
        Console.WriteLine(txt);
        return 0;
    
    public void set()
    
        SetCallback(m_Instance);
    
    public void test()
    
        TestCallback();
    
    [DllImport("WEyeLib.dll", EntryPoint = "SetCallback", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        private static extern void SetCallback(Callback fn);
    [DllImport("WEyeLib.dll", EntryPoint = "TestCallback", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        private static extern void TestCallback();

C++ 代码: 命名空间 WEyeLib

    typedef int(__stdcall * Callback)(const char* chr);
    Callback Handler = 0;
    extern "C" __declspec(dllexport)
        void __stdcall SetCallback(Callback _handler) 
        Handler = _handler;
    

    extern "C" __declspec(dllexport)
        void __stdcall TestCallback() 
        int retval = Handler("Hello World");
    

【问题讨论】:

【参考方案1】:

这意味着 C# 应用程序无法找到 WEyeLib.dll。尝试将其复制到已构建的 .exe 旁边,看看是否可以修复它。

【讨论】:

实际上在我构建项目时,它会自动在构建的.exe文件所在的目录中生成一个WEyeLib.dll【参考方案2】:

我遇到了同样的问题,使用 Dependy Walker 工具负责查找丢失的 dll。在我的情况下,我的 dll 使用代码 c ++ Microsoft c ++ 运行时使用库。 出于这个原因,我不得不添加两个需要的库: -Msvcp * .dll - Msvcr * .dll

这样,我什至避免在客户端 PC 上安装 Microsoft C++ 运行时库。

【讨论】:

以上是关于C++ DLL 和 C# 应用程序 WPF:System.DllNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

在 C#(WPF) 中使用 C++ dll

从 CLI C++ 应用程序在库中加载 C# WPF 表单

c#/wpf OpenMP 在外部 dll 中

对界面编程来说c++的mfc,qt和c#的winform,wpf哪个应用多?学哪个好?

尝试从 C# 调用 C++ dll 时出现格式不正确的异常

C#调用C++的DLL搜集整理的所有数据类型转换方式