• ベストアンサー

ハンドルされていない例外は・・・

ハンドルされていない例外はXXX.exe(YYY.DLL)にあります 0xC0000005:Access Violationというエラーが出ます。 エラーが出ている場所は int nRet = oraDyna.Open(*ZZZ, Sql); です。 ここを通過する時にエラーが発生します。 エラーの原因として何が考えられるでしょうか? 開発環境はWindows2000 VC++6.0です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • neko3839
  • ベストアンサー率37% (100/269)
回答No.6

少々脇に外れるかも知れませんが、ANO.1 への補足に書かれた >ODatabase *ZZZ; >ZZZ = NULL; >ZZZ = new OSession(); の "new OSession()" が謎です。 new演算子で ODatabaseクラスのオブジェクトを生成するのであれば ODatabase *ZZZ; ZZZ = new ODatabase; と記述されると思うのですが。

yamadachan
質問者

お礼

新しいPCにて環境を作り直した(Oracleなどバージョンが違う)らうまく動くようになりました。 環境の違いの細かい所まではみれなかったですが、 プログラムには問題はなかったみたいです。 みなさまありがとうございました。

yamadachan
質問者

補足

何度も回答ありがとう御座います。 >new演算子で ODatabaseクラスのオブジェクトを生成するのであれば >ODatabase *ZZZ; >ZZZ = new ODatabase; >と記述されると思うのですが。 neko3839様のおっしゃる通りです。 ZZZ = new ODatabase(); と書いてありました>< こちらの記載ミスでした;;

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • neko3839
  • ベストアンサー率37% (100/269)
回答No.5

>引数は2つだけです。optionsが付いているので >省略可能なのかなと思っていましたが違いますでしょうか?^^; 失礼しました。 >long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL があるので、 ・options = ODYNASET_DEFAULT ・snapID = NULL が入りますね。

すると、全ての回答が全文表示されます。
  • neko3839
  • ベストアンサー率37% (100/269)
回答No.4

こちらでも少々試してみますが、その前に念のための確認です。 関数は >oresult Open(const ODatabase &odb, const char *sql_statement, long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL); ですが、この3番目と4番目の引数は、御質問の際の >int nRet = oraDyna.Open(*ZZZ, Sql); では記載漏れ、あるいは省略しただけで、実際のプログラムでは記述されていますね?

yamadachan
質問者

補足

回答ありがとう御座います。 >・・・では記載漏れ、あるいは省略しただけで、実際のプ>ログラムでは記述されていますね? 記載漏れでも省略でもありません。 引数は2つだけです。optionsが付いているので 省略可能なのかなと思っていましたが違いますでしょうか?^^;

すると、全ての回答が全文表示されます。
  • neko3839
  • ベストアンサー率37% (100/269)
回答No.3

>oresult Open(const ODatabase &odb, const char *sql_statement, oraDyna.Open() の第一引数は「参照型」ですよね。 >int nRet = oraDyna.Open(*ZZZ, Sql); ここでは、「ポインタZZZが指している先頭の値」をポインタ値として渡す事を意図しているのですか? oraDyna.Open()の引数の型と記述の仕方を再確認した方が良いと思います。

すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

int nRet = oraDyna.Open(*ZZZ, Sql); で *ZZZと書くと、構造体そのものを渡しています。 通常は、構造体そのものを渡すことは、ありません。(全くないわけではありませんが) ですので、通常はポインターを渡すため、 ZZZとすべきかと思いますが・・・・ ZZZの型とoraDyna.Openのプロトタイプが提示されていないので、想像です。

yamadachan
質問者

補足

>ZZZの型 ODatabase *m_hDbc; ↑型じゃない? ODynaset oraDyna; ↓ class OEXPORT ODynaset : public OOracleObject { public: oresult Open(const ODatabase &odb, const char *sql_statement, long options = ODYNASET_DEFAULT, OSnapshotID *snapID = NULL); ・・・・・・・・・・ private: char *m_sqlstmt; // the sql statement that creates the dynaset // internal helper routines oresult Copy(const ODynaset &other); oresult Cleanup(void); }; です。 Oracle8iと9iでの環境の違いという可能性もありますでしょうか? 現在は9iで試しています。

すると、全ての回答が全文表示されます。
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

*ZZZが初期化(領域確保)されていない?

yamadachan
質問者

補足

>*ZZZが初期化(領域確保)されていない? ODatabase *ZZZ; ZZZ = NULL; ZZZ = new OSession(); と記述はしてあります。 VC初心者の為調べたのですがうまくいきません。

すると、全ての回答が全文表示されます。

関連するQ&A