マーシャリングとは何ですか?なぜそれが必要なのですか?
intC#からCに有線で送信できず、マーシャリングする必要があるとは信じがたいです。なぜC#は開始信号と終了信号で32ビットを送信して、Cコードに受信したことを通知できないのintですか?
マーシャリングが必要な理由とその使用方法に関する優れたチュートリアルやサイトがあれば、それは素晴らしいことです。
マーシャリングとは何ですか?なぜそれが必要なのですか?
intC#からCに有線で送信できず、マーシャリングする必要があるとは信じがたいです。なぜC#は開始信号と終了信号で32ビットを送信して、Cコードに受信したことを通知できないのintですか?
マーシャリングが必要な理由とその使用方法に関する優れたチュートリアルやサイトがあれば、それは素晴らしいことです。
言語と環境が異なれば、呼び出し規約、レイアウト規則、プリミティブのサイズ(charC#とCを参照char)、オブジェクトの作成/破棄規則、および設計ガイドラインも異なります。管理された土地から、管理されていない土地がそれを見て理解できる場所に、またはその逆に、ものを取り出す方法が必要です。それがマーシャリングの目的です。
.NETコード(C#、VB)は、CLR(共通言語ランタイム)によって「管理」されているため、「管理」と呼ばれます。
C、C ++、またはアセンブラーでコードを作成する場合、CLRが関与しないため、すべて「アンマネージド」と呼ばれます。あなたはすべてのメモリの割り当て/割り当て解除に責任があります。
マーシャリングは、マネージコードとアンマネージコードの間のプロセスです。これは、 CLRによって提供される最も重要なサービスの1つです。
マーシャリングintは、理想的にはあなたが言ったことです。CLRのマネージスタックからCコードが認識できる場所にメモリをコピーします。文字列、オブジェクト、配列、およびその他のタイプのマーシャリングは難しいことです。
ただし、P/Invoke相互運用レイヤーはこれらのほとんどすべてを処理します。
Vinkoがコメントで述べているように、特別なマーシャリングなしでプリミティブ型を渡すことができます。これらは「blittable」タイプと呼ばれ、byte、short、int、longなどのタイプとそれらの符号なしの対応物が含まれます。
このページには、blittableおよびnonblittableタイプのリストが含まれています。
マーシャリングは、ピンボークを使用して、管理されていない世界のデータ型と通信したり、その逆を行ったりするための、より良い単語またはゲートウェイを必要とする「媒体」であり、データが安全な方法で返されることを保証します。
マーシャリングとは、関数の署名を別のマシン上にある別のプロセスに渡すことであり、通常、構造化データを専用の形式に変換して、他のプロセッサシステムに転送できます(シリアル化/逆シリアル化)。