COMオートメーションのインスタンスが取得できない

解決


よっち  2007-04-01 17:17:34  No: 64834

VisualC++.NET2003 を使って アプリAを操作するアプリを製作して
おります。アプリAはCOMオートメーション機能が備わっており、
これを使いたいと思っております。
(アプリAは他の方が製作しました。)

まずは、import を使って、以下のように宣言しました。
main.cppの先頭に
#import "EchoLink.exe" no_namespace named_guids raw_interfaces_only
としました。コンパイルをかけると、"echolink.tlh" ファイルが生成されました。

以下のようにコーディングしました。

BOOL TestOpen( void ) 
{
    SetupConfig* pSetupConfig;
    
    CoInitialize( NULL );
    HRESULT ret = CoCreateInstance( 
  CLSID_SetupConfig, NULL, CLSCTX_INPROC_SERVER, 
  IID_ISetupConfig, (void **)&pSetupConfig );
    if ( ret == S_OK) {
         // 正常時の処理を入れる予定です。
         CoUninitialize();
  return TRUE;
    }
    CoUninitialize();
    return TRUE;
}
コンパイルは通り、実行すると、CoCreateInstance が失敗して
ret の値は 0x80040154(クラスが登録されていません)となってしまいます。

・echolink.tlh ファイルは以下のURLに置きました。
http://jm7muu.mydns.jp/index.php?plugin=attach&pcmd=open&file=echolink.tlh.txt&refer=SoftTSQ-bugtrack%2F5
・アプリAのAPIリファレンスは以下にあります。
http://www.hfremote.us/files/API.zip

お気づきの点がございましたら、ご指摘いただけませんでしょうか?
よろしくお願いします。


渋木宏明(ひどり)  URL  2007-04-01 18:44:50  No: 64835

アプリAがオートメーションサーバーならば

HRESULT ret = CoCreateInstance( 
CLSID_SetupConfig, NULL, CLSCTX_INPROC_SERVER, 
IID_ISetupConfig, (void **)&pSetupConfig );

で CLSCTX_INPROC_SERVER を指定するのは間違いなのでは?

それとも、CLSID_SetupConfig は、アプリAに付属するインプロセスサーバーなのでしょうか?


よっち  2007-04-01 19:31:36  No: 64836

ひどりさん、返信有難うございます。

APIマニュアルには、以下のように書かれています。
The EchoLinkSession component is implemented as an out-of-process COM server, hosted by the EchoLink program (EchoLink.exe) itself.

翻訳サイトで日本語にすると、以下のようになるようです。
EchoLinkSessionの部品はEchoLinkプログラム(EchoLink.exe)自体でホスティングされたプロセスで出ているCOMサーバとして実装されます。

これは、EchoLink.exe 自体に COMサーバが走っているのかな?汗

If EchoLink is not already running, instantiating EchoLinkSession will start it up automatically. 

EchoLinkが起動されていないときには、
自動的に EchoLinkSession が走る??

インプロセスサーバーという意味がわからないので、調べてみます。
参考になるサイトなど御座いますでしょうか?

初心者ですみません。
よろしくお願いします。

以上です。


渋木宏明(ひどり)  URL  2007-04-01 20:43:42  No: 64837

>APIマニュアルには、以下のように書かれています。
>The EchoLinkSession component is implemented as an out-of-process COM server, hosted by the EchoLink program (EchoLink.exe) itself.

「アウトプロセスサーバだ」と明記されてますね。

>EchoLinkが起動されていないときには、
>自動的に EchoLinkSession が走る??

そういうことです。

Excel などの Office アプリケーションをオートメーションするのと同じノリなようですね。

>インプロセスサーバーという意味がわからないので、調べてみます。

物凄く簡単に言うと

・インプロセスサーバ=DLL
・アウトプロセスサーバ=EXE(外部プロセス)

ということです。


よっち  2007-04-02 00:22:28  No: 64838

なるほどー。ひどりさん有難う御座います。
とりあえず、ひとつひとつ確認していったところ、

CLSCTX_LOCAL_SERVER
にしたところ、ret = S_OK となりました。

有難う御座います。<m(__)m>

もうちょっと勉強してみます。助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加