プロが教える店舗&オフィスのセキュリティ対策術

<VC++で作成したDLLをVBで呼ぶ処理>
DLL側でメモリ割り当てを行ったあと、VB側でメモリ解放を
したいのですが、方法がわかりません。
教えてください。

A 回答 (3件)

VBの変数スコープの範囲で動的に廃棄しますので


なにもしなくてよい

下記ATLの場合
sub vfHoge
 dim sFunctonName as string
 sFunctionName = oHoge.FunctionName
endsub 'ここでsFunctonNameの領域開放

STDMETHODIMP CBSFDevKit::get_FunctionName(BSTR *pVal)
{
 *pVal = ::SysAllocString(m_sFunctionName);
 return S_OK;
}

この回答への補足

VBもVC++も初心者なので見当違いだったらすみません。

VC++のDLL側で割り当てたメモリもVB側から参照しただけで
解放されるのでしょうか?
VC++でいうfreeのような事はしなくていいのでしょうか?

確認のためお願いします。

補足日時:2001/09/18 21:25
    • good
    • 0

こんにちは。

itohhといいます。

DLL側で動的にメモリを割り当てた場合は、解放しなければいけません。
(メモリリークしてそのうち再起動しなければいけなくなります。)

ご自分でDLLを作成しているのでしょうか?
それならば、DLLで解放する関数を作成しては如何ですか?

この回答への補足

DLL側でmallocなどでメモリ割り当てをした場合、
VB側ではメモリ解放はできないという事でよろしいのでしょうか?

補足日時:2001/09/19 10:07
    • good
    • 0

こんにちは。

itohhといいます。

mallocで確保されたエリアは開放できないと思います。
なぜなら、VBからでは、Free関数が直接呼べないからです。

もし、どうしてもVBで解放したいのであれば、malloc関数の代わりに
GlobalAlloc関数を使用してください。
そのときのハンドルを返すようにすることによってGlobalFree関数(解放する関数)
を使用することが出来るようになります。

関数の対応は、
malloc関数 -> GlobalAlloc関数(およびGlobalLock関数)
Free関数  -> GlobalFree関数(およびGlobalUnlock関数)
です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!