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
お気づきの点がございましたら、ご指摘いただけませんでしょうか?
よろしくお願いします。
アプリAがオートメーションサーバーならば
HRESULT ret = CoCreateInstance(
CLSID_SetupConfig, NULL, CLSCTX_INPROC_SERVER,
IID_ISetupConfig, (void **)&pSetupConfig );
で CLSCTX_INPROC_SERVER を指定するのは間違いなのでは?
それとも、CLSID_SetupConfig は、アプリAに付属するインプロセスサーバーなのでしょうか?
ひどりさん、返信有難うございます。
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 が走る??
インプロセスサーバーという意味がわからないので、調べてみます。
参考になるサイトなど御座いますでしょうか?
初心者ですみません。
よろしくお願いします。
以上です。
>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(外部プロセス)
ということです。
なるほどー。ひどりさん有難う御座います。
とりあえず、ひとつひとつ確認していったところ、
CLSCTX_LOCAL_SERVER
にしたところ、ret = S_OK となりました。
有難う御座います。<m(__)m>
もうちょっと勉強してみます。助かりました。
ツイート | ![]() |