2


0

ネイティブコードからマネージコード(C ++ / CLI)に配列を送信するベストプラクティスですか?

USB HIDデバイスの読み取り/書き込み用にwin32 dllを作成しています。 交換するデータは、64バイトの符号なしchar配列です。 クライアントプログラムはC ++ / CLIで記述されています。

最大速度と最小オーバーヘッドを実現するには、管理対象クライアントにアレイを送信する効率的な方法が必要です。

私が今考えることができる2つのオプションがあります:

  1. ネイティブ:PostMessageを使用して、配列のポインターを送信します。
    管理:WndProcで、Marshal。新しいマネージByte配列にポインターをコピーし、ポインターを削除します。

  2. ネイティブ:データを処理するコールバックとして関数ポインターを使用します。
    管理対象:Marshal.GetFunctionPointerForDelegateを使用して、関数ポインターをネイティブワールドに渡します。

ありがとう。

1 Answer


2


奇妙なマーシャリング方法の選択は時期尚早な最適化だと思います。 データをマーシャリングする最も簡単な方法を使用し、それが十分に実行されない場合は他のメソッドを評価してみてください。 コールバックまたはメッセージポストのアーキテクチャ上の必要性がなければ、配列を関数に渡すだけではどうですか?