103

マーシャリングとは何ですか?なぜそれが必要なのですか?

intC#からCに有線で送信できず、マーシャリングする必要があるとは信じがたいです。なぜC#は開始信号と終了信号で32ビットを送信して、Cコードに受信したことを通知できないのintですか?

マーシャリングが必要な理由とその使用方法に関する優れたチュートリアルやサイトがあれば、それは素晴らしいことです。

4

6 に答える 6

83

言語と環境が異なれば、呼び出し規約、レイアウト規則、プリミティブのサイズ(charC#とCを参照char)、オブジェクトの作成/破棄規則、および設計ガイドラインも異なります。管理された土地から、管理されていない土地がそれを見て理解できる場所に、またはその逆に、ものを取り出す方法が必要です。それがマーシャリングの目的です。

于 2010-02-10T22:26:28.143 に答える
34

.NETコード(C#、VB)は、CLR(共通言語ランタイム)によって「管理」されているため、「管理」と呼ばれます。

C、C ++、またはアセンブラーでコードを作成する場合、CLRが関与しないため、すべて「アンマネージド」と呼ばれます。あなたはすべてのメモリの割り当て/割り当て解除に責任があります。

マーシャリングは、マネージコードとアンマネージコードの間のプロセスです。これは、 CLRによって提供される最も重要なサービスの1つです。

于 2016-04-07T15:44:43.523 に答える
11

マーシャリングintは、理想的にはあなたが言ったことです。CLRのマネージスタックからCコードが認識できる場所にメモリをコピーします。文字列、オブジェクト、配列、およびその他のタイプのマーシャリングは難しいことです。

ただし、P/Invoke相互運用レイヤーはこれらのほとんどすべてを処理します。

于 2010-02-10T22:27:18.643 に答える
9

Vinkoがコメントで述べているように、特別なマーシャリングなしでプリミティブ型を渡すことができます。これらは「blittable」タイプと呼ばれ、byte、short、int、longなどのタイプとそれらの符号なしの対応物が含まれます。

このページには、blittableおよびnonblittableタイプのリストが含まれています。

于 2010-02-10T22:38:56.960 に答える
7

マーシャリングは、ピンボークを使用して、管理されていない世界のデータ型と通信したり、その逆を行ったりするための、より良い単語またはゲートウェイを必要とする「媒体」であり、データが安全な方法で返されることを保証します。

于 2010-02-10T22:37:42.513 に答える
3

マーシャリングとは、関数の署名を別のマシン上にある別のプロセスに渡すことであり、通常、構造化データを専用の形式に変換して、他のプロセッサシステムに転送できます(シリアル化/逆シリアル化)。

于 2019-01-05T19:11:12.693 に答える