13,005
回編集
365行目: | 365行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
===== 引数 ===== | |||
C#ライブラリ側でデータ型のポインタを受け取り、その変数の値を変更しても、その変更がC++実行ファイル側に反映されることは期待できない。<br> | |||
これは、C#とC++が異なるメモリ管理とランタイム環境を持っており、それぞれ独自のメモリ管理を行うためである。<br> | |||
<br> | |||
C#では、ガベージコレクションが行われ、メモリの確保や解放はCLR (Common Language Runtime) によって管理されている。<br> | |||
一方、C++では開発者が手動でメモリの確保と解放を行う。<br> | |||
<br> | |||
したがって、C#ライブラリ内でデータ型のポインタを受け取り、その変数の値を変更したとしても、それはC#ランタイムの管理するメモリ内で行われることになる。<br> | |||
C++実行ファイル側では、C#ランタイムのメモリに直接アクセスできないため、その変更が反映されることはない。<br> | |||
<br> | |||
異なるランタイム環境でのメモリ管理の違いからくる制約を考慮して、C++とC#間でデータの受け渡しを行う場合は、適切な手法やデータ構造を選択する必要がある。<br> | |||
例えば、C#ライブラリ側で変更可能な値を戻り値として返し、それをC++で受け取る等の方法がある。<br> | |||
<br> | |||
==== 戻り値がある場合 ==== | ==== 戻り値がある場合 ==== | ||
===== 戻り値がint型の場合 ===== | ===== 戻り値がint型の場合 ===== |