初めて質問させて頂きます。
VC6.0で作ったCプログラムの中からVB6.0で作ったActiveX(EXE)を呼出すことができたの
ですが、同じCプログラムでスレッドをおこして、その中からVB6.0で作ったActiveX
(EXE)を呼出すとエラーが発生してしまいます。
--------------------------------------
pIDispatch->GetIDsOfNames( IID_NULL, &olename, 1, GetUserDefaultLCID(),
&dispid );
の復帰値が
・CoInitialize has not been called
・Object is not connected to server
--------------------------------------
CのスレッドからはActiveX(EXE)は呼出せないのでしょうか?
メッセージの通りだと思うのですが、
そのスレッドで、CoInitialize() を呼び出していますか?
dairygoodsさん、早速レスありがとうございます。
CoInitialize()は呼び出していません。
こんな感じで呼び出してみます。
-------------------------------------
CoInitialize(NULL);
従来の処理
CoUninitialize();
-------------------------------------
本当にありがとうございました。
以下の呼び出しを追加すると、
-------------------------------------
CoInitialize(NULL);
従来の処理
CoUninitialize();
-------------------------------------
「'8001010e'
アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼
び出しました。」
のエラーになってしまいました。
スレッド内で使用している呼出し先のインスタンス(pIDispatch)を、スレッド起動時
の引数で受け取るようにしているのですが、これがいけないのでしょか?
これもメッセージの通りだと思います。
スレッド間でCOMポインタを渡さないようにする方が簡単だとは思いますが、
どうしても別スレッドに渡したいのでしたら、
CoMarshalInterThreadInterfaceInStream などを調べてみてください。
dairygoodsさん、ありがとうございます。
oMarshalInterThreadInterfaceInStreamを調べてみます。
これで何とか解決できるように頑張ります。
エラーコード(メッセージ)から原因を調べようとする努力が足りないですね。以後、
気をつけます。
ありがとうございました。
dairygoodsさん、動きました!
今日はゆっくり寝れそうです。
本当にありがとうございました。