例:私はそのような機能を備えたC#のCOMオブジェクトを持っている:C++からC#comオブジェクトを呼び出すと、誰がメモリを解放するのですか?
int GetString([In, Out, MarshalAs(UnmanagedType.LPStr)]ref string str)
それから私は、生成されたラッパーの方法のように宣言されている、(COMオブジェクトは#import
キーワードを経て使用されているC++で)C++からint型を呼んでいる:
GetString(LPSTR * str, long * retVal)
char myStr[40];
LPSTR buf = (LPSTR)myStr;
LPSTR pBuf = &buf;
pComObject->GetString(pBuf);
奇妙である何:私はそれをこのように呼んでいる
1)myStr満たされていない、とbuf
値は(それが呼び出した後myStr
と同じdoesntの)変更しそうですが、私はC#のマーシャラーiがfree(buf);
かどうかを呼び出す必要がありますC#はそれほどメモリを割り当てる場合は、メモリ
2)の新しいブロックを割り当てているとし?
Upvoted!良い説明と、私はルールを言及している必要があります。 –