マルチスレッドでActiveXをアクセスしたいです。 – プログラミング – Home

マルチスレッドでActiveXをアクセ...
 
通知
すべてクリア

[解決済] マルチスレッドでActiveXをアクセスしたいです。


テンテン
 テンテン
(@テンテン)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

初めて質問させて頂きます。
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)は呼出せないのでしょうか?


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

メッセージの通りだと思うのですが、
そのスレッドで、CoInitialize() を呼び出していますか?


返信引用
テンテン
 テンテン
(@テンテン)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

dairygoodsさん、早速レスありがとうございます。
CoInitialize()は呼び出していません。
こんな感じで呼び出してみます。
-------------------------------------
CoInitialize(NULL);
  従来の処理
CoUninitialize();
-------------------------------------
本当にありがとうございました。


返信引用
テンテン
 テンテン
(@テンテン)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

以下の呼び出しを追加すると、
-------------------------------------
CoInitialize(NULL);
  従来の処理
CoUninitialize();
-------------------------------------
「'8001010e'
アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼
び出しました。」
のエラーになってしまいました。
スレッド内で使用している呼出し先のインスタンス(pIDispatch)を、スレッド起動時
の引数で受け取るようにしているのですが、これがいけないのでしょか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

これもメッセージの通りだと思います。

スレッド間でCOMポインタを渡さないようにする方が簡単だとは思いますが、
どうしても別スレッドに渡したいのでしたら、
CoMarshalInterThreadInterfaceInStream などを調べてみてください。


返信引用
テンテン
 テンテン
(@テンテン)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

dairygoodsさん、ありがとうございます。
oMarshalInterThreadInterfaceInStreamを調べてみます。
これで何とか解決できるように頑張ります。
エラーコード(メッセージ)から原因を調べようとする努力が足りないですね。以後、
気をつけます。
ありがとうございました。


返信引用
テンテン
 テンテン
(@テンテン)
ゲスト
結合: 21年前
投稿: 16
Topic starter  

dairygoodsさん、動きました!
今日はゆっくり寝れそうです。
本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました