2011-11-11 18 views
0

この質問はthisスレッドの結果です。管理されたコードでのMarshalAsクエリ管理されていない

私の質問は、いくつかのパラメータにはMarshalAs属性を指定する必要があるが、他のパラメータには指定できないのはなぜですか?私はC++とc#のデータ型の違いがコンパイラの方向性を必要とするほど大きいと思っていただろうか?

言い訳私の無知、IVEは:)

乾杯、 アダム

+0

この宣言は間違っています。文字列にヌルポインタを渡しているためにのみ動作します。実際には、[マーシャル]はすべて削除する必要があります。そのようなものは危険です。 –

答えて

1

整列化されていないパラメータの前に、アンマネージコードを扱ったことがないようにだけINTSされています。インテルはintであり、intはint、どこでも、ネイティブかどうかではありません。だから、彼らに対処するための特別な指示は必要ありません。値は値だけに渡され、あなたはすべて設定されています。

ポインタと文字列は、よりトリッキーです。 C#文字列は、C文字列のように必ずしも表現されているわけではありません。単純にヌルで終わる文字配列へのポインタです。内部変換が必要な場合があります。同様に、配列を参照渡しする必要があります。

アンマネージコードでは、アドレスは単なるデータであることに注意してください。彼らには特別なものは何もありません。だから、C#コンパイラは、あなたの変数について知っているすべてのものを取って数値にする方法を知る必要があります。

+0

ああ、優秀。明確な説明、多くの感謝:) –

関連する問題