【问题标题】:Consuming a DLL(Universal Apps) from a WinRT Component从 WinRT 组件使用 DLL(通用应用程序)
【发布时间】:2014-11-20 15:53:17
【问题描述】:

我有一个为 iOS 和 Android 开发的 C++(本机代码)DLL 项目。我想将它移植到 C++ DLL(通用应用程序)以供 C# 通用商店应用程序使用。代码不依赖于硬件。

作为第一步,在移动所有代码之前,我创建了一个小型测试解决方案,如下所示:

  1. 我创建了一个 C++ DLL(通用应用程序)myDll,它有一个 C++ Add1(int, int) 函数。
  2. 我创建了一个具有 C++ Add2(int, int) 函数的 C++ WinRT 组件(通用应用程序)。
  3. 我创建了一个 C# 通用应用程序 myApp,它调用 Add2,它又调用 Add1

编译通过了,但是当我运行 myApp 时,应用程序崩溃并报告 myDll 不是 已加载。

我的问题是:

  1. 我上面描述的场景可能吗?如果是这样,导致 myApp 崩溃的问题可能是什么?
  2. 我是否有更好的方法来移植 iOS/Android C++ 代码以在 C# 通用应用程序中使用?

谢谢

【问题讨论】:

  • 所有 DLL 都必须包含在最终包中。您缺少第一个 DLL。目前还不是很清楚你是如何做到的,但是构建系统不会有很多好的线索来知道这种依赖关系的存在。需要添加对 DLL 的引用。
  • 如何添加对 DLL 的引用? WinRT 组件(上面的第 2 步)无法将 DLL 添加为引用。 C# 应用程序将不接受在上述步骤 1 中创建的 DLL。

标签: c# visual-c++ dll windows-runtime windows-8.1


【解决方案1】:

1) 和 Hans 一样,我的第一个猜测是您没有将 Dll 包含在应用程序包中。如果它未部署在包中,则无法加载。由于您无法添加对 DLL 的引用,因此您需要显式添加它:

将文件添加到项目中,在解决方案资源管理器窗口中打开文件的属性,并将它们标记为要包含在应用程序包中的内容。

在部署后检查它实际上是否在 appx 目录中。

2) 这可能是最简单的。您也可以只包括 Dll 和 pinvoke。无论哪种方式,您都需要确保 dll 对 Windows 应用商店应用有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多