x32をターゲットとするWin7 x64では、C#、.net 4.0上にアプリケーションを構築しています。PInvoke、ポインタと配列のコピー
私たちのアプリケーションではサードパーティのライブラリを使用しています。このライブラリはC++を使用して書かれています。ただし、C#開発者にこのライブラリを使用させるために、P/Invokeを使用してラップしています。したがって、API関数を呼び出す方法です。次のように
APIコールのいずれかである:
ReadFromDevice(int deviceAddress, int numBytes, Byte[] data);
この機能は、外部装置からのデータのNUMBYTESを読み取り、データ[]の中に置きます。ご覧のとおり、3番目の引数としてC#Byte配列が表示されます。今、問題は、あらかじめ宣言された配列内の任意の場所にデータを読み込みたいということです。例:
Byte[] myData = new Byte[1024*1024*16];
ReadFromDevice(0x100, 20000, &myData[350]) // Obviously not possible in C#
C/C++を使用していた場合、これは簡単なことです。基礎となるAPIがC++で書かれていることを考えると、私もC#でこれを行うことができるはずですが、C#でこれを行う方法を理解することはできません。たぶん、提供されているP/Invokeインターフェイスを介さずに基礎となるライブラリを呼び出すことができ、カスタムインターフェイスを書くことができますか?
すべてのアイデアをいただければ幸いです。
よろしく、
でそれを呼び出すことができます。もし彼がC#のソースを管理していれば、それは一つのことになるだろうが、元の質問からは聞こえない。 –
しかし、質問をもう一度読むと、OPがC++ライブラリへのアクセス権を持っているように聞こえるので、単に彼自身のDllImportを追加し、署名を変更してa 'byte []'なら、これはうまくいくでしょう。 downvoteを削除する。 –
" x32をターゲットとしたWin7 x64上のc#、.net 4.0上にアプリケーションを構築しています このライブラリはC++を使用して書かれていますが、開発者はこのライブラリを使用し、P/Invokeを使用してラップしているので、API関数を呼び出す方法です 彼らはC#を制御し、C++ライブラリ用のラッパーを作成しています! – N4rk0