问题标签 [c++-cx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1987 浏览

c++ - 从本机 C++ 类的实例到 C++/CX ref 类的回调的最佳方法是什么?

我正在编写一个 C++ WinRT 组件 DLL 用于我的基于 .NET 的 WinRT 应用程序。DLL 定义了一个 SoundSample 引用类,该类通过调用IXAudio2::CreateSourceVoice创建 XAudio 语音。CreateSourceVoice 采用“IXAudio2VoiceCallback *pCallback”参数来启用各种音频事件的回调。现在我正在尝试根据这篇文章实现该回调。XAudio 应该只是回调我的 SoundCallback 类的方法,定义为:

一切都很好,直到我试图弄清楚如何从我的本机回调类的实例回调到父 SoundSample 对象。我在想我可以将 SoundSample 类的实例传递给 SoundCallback 对象,但似乎它不允许我在本机类中声明 ref 类字段:

我回顾了在本机 C++ 中实现回调,到目前为止我找不到合理的解决方案。最好/最简单的方法是什么?

0 投票
2 回答
5111 浏览

windows-8 - 在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是什么?

我有这样的课:

这行得通。现在我想将 MyProperty 的实现移动到 CPP 文件中。当我这样做时,我得到了属性已经定义的编译器错误:

什么是正确的语法?

0 投票
1 回答
713 浏览

xaml - 访问任务内的 XAML 控件时出现异常

如果我尝试访问任务(和 task::then)中的 XAML 控件,我的 Metro XAML 应用程序总是会因异常而停止。相同的代码在任务之外没有任何问题。我没有找到任何答案 - 我错过了什么?

VS11 调试器报告:Concurrency::unobserved_task_exception

例外:应用程序调用了为不同线程编组的接口。

非常感谢您的帮助!

如果我们添加 task_continuation_context::use_current() 作为第二个参数,atask.then() 延续代码将无异常运行:

0 投票
2 回答
3022 浏览

struct - 如何在 WinRT 组件 C++/CX 中通过引用传递结构

我的 WinRT 组件中有以下内容:

但是,当从 C# 调用时,winRTStruct->y 和 x 的值在方法内似乎始终为 0:

通过引用传递结构以便在用 C++/CX 编写的 WinRTComponent 的方法中更新它的正确方法是什么?

0 投票
2 回答
2307 浏览

c++ - 泛型在 C++/CX 中的工作原理

我在 Internet 上找不到任何关于此的内容,因此我正在寻找对 C++/CX 实施方式有深入了解的人。关于 C++/CX的Wikipedia 文章说它支持基于运行时的泛型,这意味着您不需要具有完整实现的头文件来实例化泛型类型。我了解这对 .NET 是如何工作的(程序集包含 IL 代码,JIT 可以在其中插入具体类型并在有新实例时对其进行编译),但是在 C++/CX(它是本机编译的)中没有 JIT 可以编辑运行时的代码(我认为这对于 x86 机器代码来说非常困难)

那么这里的诀窍是什么,是用拳击进行类型擦除还是一些新的人为方案?

(我知道关于类型的元数据是以 .NET 格式存储的,我在关注方法中的代码)

0 投票
2 回答
3684 浏览

c++ - 如何在 C++/CX 中创建单例?

如何在 C++/CX 中创建单例类?

0 投票
0 回答
279 浏览

c++ - How do I unit test a C++ metro class library?

I have created a dead simple C++ metro class library in the VS2011 beta, with a Vector3 class. I want to unit test some of the methods.

I added a C++ metro unit test project to the solution and, for the life of me, I can't figure out how to correctly reference the other project without compile errors in the tests.

I know that whatever the answer is it will be downright obvious in hindsight. I've tried following various tutorials (example), but none have had the intended result.

I've tried all the things I can think of. Every variation of include/using/linker-paths/library-paths against the project/.lib/.dll/.winmd/.h/.cpp files. Generally the errors come down to:

That is to say, I think I've managed to properly import the headers, but the object code they reference is not found.

0 投票
1 回答
2259 浏览

time - 在 C++/CX 中实现异步延迟

我正在尝试编写一个函数,给定秒数和回调,在给定的秒数后运行回调。回调不必在同一个线程上。目标语言是 C++/CX。

我尝试使用 Windows::System::Threading::ThreadPoolTimer,但结果是内存访问异常。问题似乎是无法从计时器正在运行其回调的托管线程访问回调实现(在本机 C++ 中)。

我不想创建一个线程并在其上休眠,因为可能会有很多并发延迟。

0 投票
0 回答
1447 浏览

c# - “指定的模块无法找到。” 从 C# 调用 WinRT 时发生

信息

指定的模块无法找到。(来自 HRESULT 的异常:0x8007007E)

堆栈跟踪:

为什么会发生这种情况?谢谢。

0 投票
1 回答
3104 浏览

zip - 在 Windows 8 上解压缩存档

我以前使用过 MiniZip(zlib 包装器)来解压缩档案。MiniZip 不能用于 Metro 应用程序,因为它使用“iowin32.c”中已弃用的 API -- CreateFile() 和 SetFilePointer()。

我认为这将是一个简单的修复,并使用 CreateFile() 和 SetFilePointer() 创建了“iowinrt.c”,并用 CreateFile2() 和 SetFilePointerEx() 替换。虽然通过这种方式我获得了一个仅使用经过批准的 Win8 API 的 MiniZip 版本,但它仍然没有用——我忘记了沙盒。如果我使用 FileOpenPicker() 选择一个文件并将其路径传递给我修改后的 MiniZip,我仍然无法打开它—— CreateFile2() 将失败并显示“访问被拒绝”。信息。

因此,现在用于文件访问的旧 C API 似乎几乎没用了;我的理解是,为了解决这个问题,我需要使用新的异步文件访问在 C++/CX 中重新实现我的“iowinrt”。还有其他选择吗?我想我在某处看到 WinRT 确实具有压缩/解压缩功能,但它仅适用于单个文件,而不适用于存档。

附加要求,我需要它在内存中工作。

有一刻我以为我有一个通过 .NET Framework 4.5 的解决方案:

  1. 我找到了有关如何创建可从 C++/CX 使用的 .NET 类的以下信息:http: //social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/3ff383d0-0c9f-4a30- 8987-ff2b23957f01

  2. .NET Framework 4.5 在 System.IO.Compression 中包含 ZipArchive 和 ZipArchiveEntry 类:http: //msdn.microsoft.com/en-us/library/system.io.compression.ziparchive%28v=vs.110%29.aspx# Y0 http://msdn.microsoft.com/en-us/library/system.io.compression.ziparchiveentry%28v=vs.110%29.aspx#Y0

我想我可以创建带有 WinMD 输出类型的 C# Metro 类库,公开 ZipArchive 和 ZipArchiveEntry,然后在我的 C++/CX 项目中使用它。但是,即使它起作用,它也不会在内存中起作用;似乎 ZipArchive 和 ZipArchiveEntry 仅适用于文件。