C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: SysAllocStringで確保したメモリの解放について


(過去ログ 115 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■67848 / inTopicNo.1)  SysAllocStringで確保したメモリの解放について
  
□投稿者/ アブサン (5回)-(2013/09/05(Thu) 11:30:17)

分類:[ASP.NET (C#)] 

こんにちは。

ASP.NET(C#)→ActiveX DLL(C++)でActiveX DLLで生成した文字列
をASP.NET側で受け取ることを行っております。

下記で質問しご回答いただきました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=67808

その追加の質問ですが、ActiveX DLL側でSysAllocStringで確保
したメモリの解放の実装方法がわかりません。

MSDNの下記サイトでは「BSTR を返す関数を実装する場合は、
文字列を割り当てますが、解放はしません。受け取り側の関数
がメモリを解放します。」とあります。

http://msdn.microsoft.com/ja-jp/library/xda6xzx7(v=vs.90).aspx

「受け取り側の関数がメモリを解放します」というのは
受け取り側の関数に解放するためのコーディングを施す必要がある
という意味であっておりますでしょうか?

その場合、ActiveX DLL側で解放用の(SysFreeStringを実行する)
メソッドを用意し、呼び出し側でそれをCALLさせるのが正しい
でしょうか?

引用返信 編集キー/
■67850 / inTopicNo.2)  Re[1]: SysAllocStringで確保したメモリの解放について
□投稿者/ Hongliang (94回)-(2013/09/05(Thu) 12:24:04)
> 「受け取り側の関数がメモリを解放します」というのは
> 受け取り側の関数に解放するためのコーディングを施す必要がある
> という意味であっておりますでしょうか?

はい、その通りです。

> その場合、ActiveX DLL側で解放用の(SysFreeStringを実行する)
> メソッドを用意し、呼び出し側でそれをCALLさせるのが正しい
> でしょうか?

いいえ、呼び出し側がSysFreeStringするだけです。
ActiveX DLLは気にする必要はありません。

で、UnmanagedType.BStrの場合、.NETのマーシャラは、呼び出し完了時に、SysFreeStringに該当する処理を自動的に行います。
ですのでC#の方でも解放を気にする必要はありません。
引用返信 編集キー/
■67851 / inTopicNo.3)  Re[2]: SysAllocStringで確保したメモリの解放について
□投稿者/ アブサン (6回)-(2013/09/05(Thu) 12:54:03)
Hongliang さん、返信ありがとうございます。
わかりやすい説明をいただき、感謝します。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -