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

时间:2016-01-03 21:45:54

标签: c# c++ wpf dll callback

我正在编写一个C#/ WPF应用程序,它依赖于C ++ DLL来管理设备。 目前我正在测试根据此线程中的代码在它们之间设置回调接口: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");
    }
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

有了这个,我甚至避免在客户端PC上安装Microsoft C ++运行时库。