同様の署名を共有するC#から呼び出そうとしている2つの関数があります。
BOOL Read (BYTE Len, BYTE* DataBuf)
BOOL Write (BYTE Len, BYTE* DataBuf)
ドキュメントから:送信されたデータのDataBuf宛先
C#呼び出しで何を使用しますか?
テストするハードウェアはまだありませんが、必要なときにできるだけ多くの呼び出しを取得しようとしています。
ありがとう。
使用する読み取り機能の場合:
[Out] byte[] buffer
使用する書き込み機能の場合:
[In] byte[] buffer
[In]
はデフォルトであり、省略できますが、明示的にしても問題はありません。
したがって、関数は次のようになります。
[DllImport(filename, CallingConvention = CallingConvention.Cdecl)]
static extern bool Read(byte len, [Out] byte[] buffer);
[DllImport(filename, CallingConvention = CallingConvention.Cdecl)]
static extern bool Write(byte len, [In] byte[] buffer);
明らかに、アンマネージ関数に配列を渡す前に、配列を割り当てる必要があります。
byte
はブリット可能であるため、マーシャラーは最適化として配列を固定し、固定されたオブジェクトのアドレスを渡します。これは、コピーが実行されず、パラメーターの受け渡しが効率的であることを意味します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加