【问题标题】:How to import C++ Legacy DLL in C# UWP application without Windows Runtime Component如何在没有 Windows 运行时组件的 C# UWP 应用程序中导入 C++ Legacy DLL
【发布时间】:2020-02-20 09:53:54
【问题描述】:

我们需要在 C# UWP 应用程序中导入 C++ 旧版 dll 并访问 c++ 类中的方法。我们没有源代码,因此无法使用 Windows 运行时组件。

请告诉我如何在 Visual C# 通用 Windows 应用程序中导入 c++ dll。

我可以在 Visual C++ 应用程序中添加 dll 作为参考,但不能在 Visual C# uwp 应用程序中添加。我已经尝试了 dllimport,但它抛出 dll not found 异常。

【问题讨论】:

    标签: c# uwp dllimport


    【解决方案1】:

    首先,UWP 无法仅通过 DLLImport 导入旧版 C++ dll。

    如果要将旧版 c++ 函数导入 C#,第一个建议是使用 WinRT 组件包装该 C++ 逻辑。

    如果您想 PInvoke dll,您可以按照以下步骤操作(您可以参考此thread):首先,将 dll 添加到您的 UWP 项目中,确保将其类型设置为 'content'。然后在正确的 cs 文件中,使用 DllImport 来 PInvoke dll。​

    此外,您需要确保您的 dll 没有使用 WinRT 中禁止的 API。您可以使用 dll 的 /ZW 编译选项来检查这一点。有一个类似的thread,可以参考一下。

    【讨论】:

    • 非常感谢它的帮助。我使用了 Dll Import 而不是 Win RT 包装器。但是在访问 dll 中的方法时,我收到此错误“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”
    • 当我测试它时,它运行良好。您能否提供有关如何访问 C++ 头文件中的方法和定义的更多信息。另外,能否提供一个可以复制的简单样本?
    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 2012-05-10
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多