この質問は、このスレッドの結果です。
私の質問は、なぜ一部のパラメーターにMarshalAs属性を指定する必要があるのに、他のパラメーターには指定しないのかということです。c ++とc#のデータ型の違いは、コンパイラーの指示を必要とするほど大きいと思いましたか?
私の無知を失礼します、なぜならiveはこれまでアンマネージコードを扱ったことがなかったからです:)
乾杯、アダム
この質問は、このスレッドの結果です。
私の質問は、なぜ一部のパラメーターにMarshalAs属性を指定する必要があるのに、他のパラメーターには指定しないのかということです。c ++とc#のデータ型の違いは、コンパイラーの指示を必要とするほど大きいと思いましたか?
私の無知を失礼します、なぜならiveはこれまでアンマネージコードを扱ったことがなかったからです:)
乾杯、アダム
マーシャリングされないパラメーターは単なるintです。Ints is ints is ints is ints、どこでも、ネイティブかどうか。したがって、それらに対処するための特別な指示は必要ありません。値は値によって渡されるだけで、すべて設定されています。
ポインタと文字列はもっと注意が必要です。C#文字列は、必ずしもC文字列のように表されるとは限りません。C文字列は、nullで終了する文字の配列への単なるポインタです。内部変換が必要な場合があります。同様に、配列は参照によって渡される必要があります-そして明示的にそうするように指示されます。
管理されていないコードでは、アドレスは単なるデータであることを忘れないでください。それらについて特別なことは何もありません。したがって、C#コンパイラは、変数について知っていることをすべて取得し、それを数値に変換する方法を知る必要があります。