0

この質問は、このスレッドの結果です。

私の質問は、なぜ一部のパラメーターにMarshalAs属性を指定する必要があるのに、他のパラメーターには指定しないのかということです。c ++とc#のデータ型の違いは、コンパイラーの指示を必要とするほど大きいと思いましたか?

私の無知を失礼します、なぜならiveはこれまでアンマネージコードを扱ったことがなかったからです:)

乾杯、アダム

4

1 に答える 1

1

マーシャリングされないパラメーターは単なるintです。Ints is ints is ints is ints、どこでも、ネイティブかどうか。したがって、それらに対処するための特別な指示は必要ありません。値は値によって渡されるだけで、すべて設定されています。

ポインタと文字列はもっと注意が必要です。C#文字列は、必ずしもC文字列のように表されるとは限りません。C文字列は、nullで終了する文字の配列への単なるポインタです。内部変換が必要な場合があります。同様に、配列は参照によって渡される必要があります-そして明示的にそうするように指示されます。

管理されていないコードでは、アドレスは単なるデータであることを忘れないでください。それらについて特別なことは何もありません。したがって、C#コンパイラは、変数について知っていることをすべて取得し、それを数値に変換する方法を知る必要があります。

于 2011-11-11T04:04:49.233 に答える