コンソールアプリでADOを使おうと思っているのですが、
'CoInitialize は呼び出されていません。'
というエラーが出ます。
どなたかこの現象について分かる方はいらっしゃいますか?
例1.
var
ZipCn: Variant;
begin
ZipCn := CreateOleObject('ADODB.Connection');
//ここでエラー
end;
例2.
var
ZipCn: ADODB_TLB.TConnection;
begin
ZipCn := ADODB_TLB.TConnection.Create(nil);
//Create時の引数が分からないのでとりあえずnilを指定しています。
ZipCn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Persist Security Info=False;' +
'Mode=Read;Data Source=ZipData.mdb';
//ここでエラー
end;
ちなみに普段はGUIアプリで例1の方法を使っていますが、問題無く動いています。
コンソールアプリではADOは使えないのでしょうか?
よろしくお願いいたします。
環境:Windows 2000 SP3、Delphi 6 Personal
エラーの内容は読まれて理解しています?
それとも、CoInitializeを呼んでいるのに「呼んでいない」とエラーが出るのでしょうか。
CoInitialize delphiで、google検索するとたくさん出てきます。
にしのさん、レスありがとうございます。
エラーの内容は全く理解していませんでした、申し訳ありません(^^;
『CoInitialize Delphi』で調べた内容を読んで、実はこれも理解できませんでしたが(汗)、
一応CoInitializeを呼ぶことでエラーも出ずに希望通りの動作をするようになりました。
GUIアプリでは暗黙のうちにこのCoInitializeが呼ばれているのでしょうか??
とりあえずコンソールアプリでADOも使えるようになったので解決とさせて頂きます。
今はまだDelphiも始めたばかりなので理解出来ないことも多いですが、
いずれこの辺りのことも理解できるように頑張りたいと思います。
ご指導ありがとうございました!
解決し忘れてましたf^^;
> GUIアプリでは暗黙のうちにこのCoInitializeが呼ばれているのでしょうか??
使用しているユニットのどこでもよいのです。
たぶん、ActiveXとか、ComCtrlsだとかのユニットで、CoInitializeが呼ばれているのだと思います。
CoInitializeの呼び出しに成功している時、そのアプリケーションを終了する際に、CoUninitializeを呼び出すのを忘れずに。
なるほど、それなら納得ですね。
CoUninitializeについては CoInitializeを調べた時に一緒に出ていたので処理に組み込んでおきました。
細部にわたるフォローありがとうございますm(_ _)m
他の掲示板用の名前を使ってしまいましたf^^;
アホ過ぎてすみません。
ツイート | ![]() |