- 締切済み
メモリ解放について
<VC++で作成したDLLをVBで呼ぶ処理> DLL側でメモリ割り当てを行ったあと、VB側でメモリ解放を したいのですが、方法がわかりません。 教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- itohh
- ベストアンサー率45% (210/459)
こんにちは。itohhといいます。 mallocで確保されたエリアは開放できないと思います。 なぜなら、VBからでは、Free関数が直接呼べないからです。 もし、どうしてもVBで解放したいのであれば、malloc関数の代わりに GlobalAlloc関数を使用してください。 そのときのハンドルを返すようにすることによってGlobalFree関数(解放する関数) を使用することが出来るようになります。 関数の対応は、 malloc関数 -> GlobalAlloc関数(およびGlobalLock関数) Free関数 -> GlobalFree関数(およびGlobalUnlock関数) です。
- itohh
- ベストアンサー率45% (210/459)
こんにちは。itohhといいます。 DLL側で動的にメモリを割り当てた場合は、解放しなければいけません。 (メモリリークしてそのうち再起動しなければいけなくなります。) ご自分でDLLを作成しているのでしょうか? それならば、DLLで解放する関数を作成しては如何ですか?
- nakashi
- ベストアンサー率51% (21/41)
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のような事はしなくていいのでしょうか? 確認のためお願いします。
補足
DLL側でmallocなどでメモリ割り当てをした場合、 VB側ではメモリ解放はできないという事でよろしいのでしょうか?