「C++の応用 - C Sharp DLLの使用」の版間の差分

ナビゲーションに移動 検索に移動
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型の場合 =====

案内メニュー