OO4Oを使ってVCからアクセスする方法について

[戻る]
ひろ 2003/02/03(月) 14:37:25
開発環境
Windows2000 VC++6.0sp5 Oracle9.2.0 

ダイアログベースのアプリケーションを作成し、OO4Oを使ってオラクルに
アクセスしていますが下記のようなソース(エラー処理等は省略)
でメモリリークのエラーが発生してしまいます。

static OSession GSe;
static ODatabase GDb;
--プログラム起動時
{
  OStartup(OSTARTUP_MULTITHREADED); //Oracle OLE 初期化
  // SESSION OPEN
  GSe.Open();
  // DB OPEN
  GDb.Open(GSe, "DB", "USR", "PASS", ODATABASE_DEFAULT);
}
--プログラム終了時
{
  GDb.Close();
  GSe.Close();
  OShutdown(); //Oracle OLE 終了処理
}

VC++のデバッグ環境終了時にメモリリークのエラーが出てしまいます。
上記のOpenとCloseをコメントアウトするとメモリリークが出なくなります。
他に、Open時、またはClose前に他に必要な手続きがあるのでしょうか?
ちなみに、Oracle 8i ではメモリリークは出ないようです。

VC++というよりも、オラクルの内容で恐縮ですが、
知っている方がいましたら教えてください。

wood 2003/02/03(月) 22:09:37
>上記のOpenとCloseをコメントアウトするとメモリリークが出なくなります。
と言うことは「OpenとClose」は不要なものなのではないですか

エラーが出なくてデータも利用できているんですよね

ひろ 2003/02/03(月) 22:39:22
>>上記のOpenとCloseをコメントアウトするとメモリリークが出なくなります。
>と言うことは「OpenとClose」は不要なものなのではないですか

>エラーが出なくてデータも利用できているんですよね

回答ありがとうございます。

すいません。説明が少し足りませんでした。
Openしないとデータの利用は出来ません。
もともとのソースでは、変数GDbを使ってデータベースにアクセスします。
現象が、再現できる最小部分までソースを削っていった結果こうなりました。

個人的には、Close()周りがかなり怪しいと感じています。
OO4Oのヘッダファイルを見てClose()以外に開放する方法を探して
見たのですが、それっぽいものが見つかりません。
使用方法が間違っているか、Close()以外に終了の方法が存在するのか、
OO4Oのバグなのか、今のところ解決に至っていません。

現在使用中のOO4Oのバージョンは、9.2.0.4.4です。

なんか、あまりVC++とは関係なく申し訳ありません。

FAY 2003/02/04(火) 09:04:06
> OStartup(OSTARTUP_MULTITHREADED); //Oracle OLE 初期化
引数をOSTARTUP_MULTITHREADEDにしてるのはどうしてでしょう?

επιστημη 2003/02/04(火) 10:41:09
で、Oracleさんはこの件についてなんと仰ってるんでしょう?

古いスレッドには追加発言できません。