ActiveX DLLを呼び出すには?

解決


COM  2007-01-17 19:40:17  No: 64234

こんにちは。
Visual Basic 6.0のActiveX DLLとして作成したCOMコンポーネントを、
C言語クライアントからアクセスしようと試みています。
DLLファイル名は"Project1.dll"で、C言語で作成した呼び出し用の
exeファイルと同じ場所に置いています。

ActiveX DLLの概要は以下の通りです。
プロジェクトの種類:ActiveX DLL
プロジェクト名:Project1
クラスモジュール名:Class1
'メソッドCalc
  Public Function Calc(ByVal x As Long, ByVal y As Long) As Long
    Calc = x + y
  End Function

C言語からは以下のプログラムにて呼び出そうとしていますが、
::CoCreateInstance関数の返り値が、どうしても
「0x80040154 クラスが登録されていません」という結果になります。
何が原因なのかご教授お願いします。
ちなみにC言語の環境は、Visual C++.NET(2003)です。

#include "stdio.h"
#include "windows.h"
#include "objbase.h"

#import "project1.dll" no_namespace named_guids raw_interfaces_only

int main(int argc, char* argv[])
{
    long x, y, z;
    HRESULT hResult;
    _Class1* pClass1;

    ::CoInitialize(0);
    
    hResult = ::CoCreateInstance((REFCLSID)CLSID_Class1, 0,
                                  CLSCTX_INPROC_SERVER,
                                 (REFIID)IID__Class1,
                                 (LPVOID*)&pClass1);

    if( ! SUCCEEDED(hResult) ) {
        printf("ERROR occured = %08x\n", hResult);
        return 0;
    }
    x = 10; y = 20;
    pClass1->Calc( x, y, &z );  
    printf("Result = %d\n", z );

    pClass1->Release();

    ::CoUninitialize();
    return 0;
}

以上、宜しくお願いします。


επιστημη  URL  2007-01-17 20:15:59  No: 64235

> ::CoCreateInstance関数の返り値が、どうしても
> 「0x80040154 クラスが登録されていません」という結果になります。

…登録されてないんじゃないですか?
同じディレクトリに置くだけで使えるものなのですか?


2リットル  2007-01-17 20:34:45  No: 64236

すばりかどうかはわかりませんが…
regsvr32などを調べてみてはいかがでしょうか?。


COM  2007-01-17 20:36:46  No: 64237

επιστημηさん、回答ありがとうございます。

「クラス登録する」とは具体的にどのような作業をすればよいのでしょうか?
DLLの呼び出しは、実行ファイルと同じディレクトリにあれば呼び出せる
と思っていたのですが。
すみません、素人なのでご教授願います。


επιστημη  URL  2007-01-17 23:30:51  No: 64238

> DLLの呼び出しは、実行ファイルと同じディレクトリにあれば呼び出せる
と思っていたのですが。

フツーのDLLはそうですが、ActiveX-DLLは登録が必要でしょう。

2リットルさんのご指摘通り、regsvr32かなんかで登録するんでしょうね。


COM  2007-01-17 23:50:14  No: 64239

ActiveX DLLは上記のような登録が必要なんですね。
コマンドプロンプトでregsvr32を使用したら、
上手く実行できました。

επιστημηさん、2リットルさん、ご指摘ありがとうございました。


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

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






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