如何在 C++ 运行时组件中的 Windows Phone 8.1 XAML 应用程序中使用 C++ dll

Posted

技术标签:

【中文标题】如何在 C++ 运行时组件中的 Windows Phone 8.1 XAML 应用程序中使用 C++ dll【英文标题】:How to use a C++ dll in Windows Phone 8.1 XAML App within C++ Runtime Component 【发布时间】:2014-12-30 22:21:07 【问题描述】:

我想在我的 C# windows phone 8.1 XAML Visual Studio 项目中使用 C++ dll(为 arm、x86 编译)。

我创建了一个 C++ 运行时组件来与我的 C++ 代码交互。此代码需要一个预编译的 dll。我将我的 lib 文件添加到我的项目设置中。编译运行良好。 如果我使用 windows phone 8.1 模拟器启动我的应用程序,我会得到:

The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我的 Visual Studio 项目结构:

c# Windows Phone 项目 Windows 项目 共享 XAML 托管 C++ RuntimeComponent Windows Phone 运行时组件窗口 共享 C++ 代码(此处使用的 dll)

我尝试过的事情:

我将 dll 拖放到我的 C++ 项目中,并将内容的属性更改为 true。 我将 dll 拖放到我的 C# 项目中,并启用了将 dll 复制到输出目录的选项

那么,如何在 C++ 运行时组件项目中使用 .lib/.dll 库?

更多细节:

我想使用 Angle(它允许使用 Microsoft fork 在 Windows/Windows Phone 上将 OpenGL 代码作为 DirectX 执行:https://github.com/MSOpenTech/angle/tree/future-dev) 为 Windows Phone 8.1 提供了基于 libEGL.lib/dll 和 libGLES.lib/dll(为 arm、win32 手动编译)的纯 C++ 模板 但我想使用带有 C++ 运行时组件的 C# 项目,以便能够使用第三方库,例如 Windows Phone 的 admob 广告框架 我发现 cocos2d 正在使用 Angle 但我不知道他们是如何做到的 (https://github.com/cocos2d/cocos2d-x/tree/v3/templates/cpp-template-default/proj.wp8-xaml)

【问题讨论】:

this 你想做什么? 不,我不想在 C# 代码中直接调用 C++ 代码。 C# 代码调用运行时组件方法(托管 c++),在此托管 c++ 代码中,我想使用 C++ dll。 要与库链接,您可能必须将 .lib 文件添加到链接器/输入/附加依赖项下的项目配置中。 我已经在那里添加了lib文件 您是否也右键单击 dll > 包含在项目中? 【参考方案1】:

我设法让它工作。

您必须将 dll 导入 C# 项目。重要的是 dll 位于 C# 项目的根目录中,并且:copy to output directory激活。

【讨论】:

您能否分享更多详细信息,或者将您的样板文件发布到 GitHub 上?我正在尝试使其正常工作,但出现 System.Runtime.InteropServices.COMException (0x80004005):尝试从 RT 组件调用任何内容时出现未指定错误。 只需将您的 dll 拖放到您的 C# 项目中(基于屏幕截图:进入 App3.WindowsPhone)但不在任何文件夹中。就是这样。 是的,这就是我所做的,但后来我得到了另一个错误。然后我从头开始,在 C++ 中留下尽可能多的代码,只是将必要的事件和对交换链面板的引用从 C# 转发到 C++,现在它正在工作。 我已经添加了与ffmpeg相关的第三方c库,例如avcodec-57.dll、avutil.dll等等。我已遵循所有步骤。但我仍然收到以下错误。 “App1.WindowsPhone.exe 中发生了‘System.IO.FileNotFoundException’类型的异常,但未在用户代码中处理”有人知道破解它吗?

以上是关于如何在 C++ 运行时组件中的 Windows Phone 8.1 XAML 应用程序中使用 C++ dll的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows c++中的cmd中运行命令后获取退出代码

如何使用 Windows 运行时使用 C# 实现 C++ API?

无法访问显示组件 - 从 Windows 服务调用

如何在 C++CX Windows 运行时组件中定义“输出”参数?

Visual StudioVisual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )

在运行时在 c++ Windows API 中调整窗口大小?