問題タブ [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 クラスへのコールバックを取得する最良の方法は何ですか?

.NET ベースの WinRT アプリケーションで使用する C++ WinRT コンポーネント DLL を作成しています。DLL は、 IXAudio2::CreateSourceVoiceを呼び出して XAudio 音声を作成する SoundSample ref クラスを定義します。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

例外: アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。

助けてくれて本当にありがとうございます!

2 番目のパラメーターとして 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でどのように機能するか

インターネット上でこれについて何も見つけることができなかったので、C ++/CXが実装されている方法についての洞察を持っている人を探しています。C ++ / CXに関するウィキペディアの記事では、ランタイムベースのジェネリックをサポートしていると述べていますが、ジェネリック型をインスタンス化するために完全に実装されたヘッダーファイルは必要ないことを意味します。これが.NETでどのように機能するかを理解しています(アセンブリにはILコードが含まれており、JITは具体的な型を挿入して、新しいインスタンス化があるときはいつでもコンパイルできます)が、C ++ / CX(ネイティブにコンパイルされます)では、編集するJITはありません実行時のコード(x86マシンコードではかなり難しいと思います)

では、ここでの秘訣は何ですか、それはボクシングによる型消去ですか、それともいくつかの新しい工夫されたスキームですか?

(型に関するメタデータが.NET形式で保存されていることは知っていますが、メソッドのコードの後に​​あります)

0 投票する
2 に答える
3684 参照

c++ - C++/CX でシングルトンを作成するには?

C++/CX でシングルトン クラスを作成するにはどうすればよいですか?

0 投票する
0 に答える
279 参照

c++ - C++ メトロ クラス ライブラリを単体テストするにはどうすればよいですか?

VS2011 ベータ版で、Vector3 クラスを使用して非常にシンプルな C++ メトロ クラス ライブラリを作成しました。メソッドのいくつかを単体テストしたい。

C++ メトロ ユニット テスト プロジェクトをソリューションに追加しましたが、私の人生では、テストでコンパイル エラーなしで他のプロジェクトを正しく参照する方法がわかりません。

答えが何であれ、後から考えるとまったく明白であることを私は知っています. さまざまなチュートリアル ( example ) に従ってみましたが、意図した結果が得られませんでした。

考えられることはすべて試しました。project/.lib/.dll/.winmd/.h/.cpp ファイルに対する include/using/linker-paths/library-paths のすべてのバリエーション。一般に、エラーは次のようになります。

つまり、ヘッダーを正しくインポートできたと思いますが、それらが参照するオブジェクト コードが見つかりません。

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 は、"iowin32.c" で非推奨の API (CreateFile() および SetFilePointer()) を使用するため、Metro アプリケーションには使用できません。

簡単に修正できると思い、CreateFile() と SetFilePointer() を CreateFile2() と SetFilePointerEx() に置き換えた "iowinrt.c" を作成しました。このようにして、承認された 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

ZipArchive と ZipArchiveEntry を公開する WinMD 出力タイプを使用して C# Metro クラス ライブラリを作成し、それを C++/CX プロジェクトで使用できると考えました。ただし、機能したとしても、メモリ内では機能しません。ZipArchive と ZipArchiveEntry はファイルでのみ機能するようです。