• 締切済み

メモリ解放について

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

みんなの回答

  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 mallocで確保されたエリアは開放できないと思います。 なぜなら、VBからでは、Free関数が直接呼べないからです。 もし、どうしてもVBで解放したいのであれば、malloc関数の代わりに GlobalAlloc関数を使用してください。 そのときのハンドルを返すようにすることによってGlobalFree関数(解放する関数) を使用することが出来るようになります。 関数の対応は、 malloc関数 -> GlobalAlloc関数(およびGlobalLock関数) Free関数  -> GlobalFree関数(およびGlobalUnlock関数) です。

  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 DLL側で動的にメモリを割り当てた場合は、解放しなければいけません。 (メモリリークしてそのうち再起動しなければいけなくなります。) ご自分でDLLを作成しているのでしょうか? それならば、DLLで解放する関数を作成しては如何ですか?

gaburi
質問者

補足

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

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.1

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; }

gaburi
質問者

補足

VBもVC++も初心者なので見当違いだったらすみません。 VC++のDLL側で割り当てたメモリもVB側から参照しただけで 解放されるのでしょうか? VC++でいうfreeのような事はしなくていいのでしょうか? 確認のためお願いします。

関連するQ&A