• 締切済み

作成したDLLをATL_COM_APPWIZARDで利用する方法について

VC6++のWin32 Dynamic Link LibraryでDLLを作成しました。 DLLはできたのですが、これを利用する方法がわかりません。 ATL COM AppWizardで作成するアプリからDLLのクラスを使いたいのですが、どのようにすれば使えるのでしょうか? 最初のDLL側は class Test{ Test(){ ShowMessageBox(NULL, "最初のDLL", "呼ばれました", MB_OK); } }; というクラスです。 ATL COM Appwizardでは、 どのように記述すれば、DLLのクラスを利用することができるのでしょうか?

みんなの回答

  • sayaama
  • ベストアンサー率44% (8/18)
回答No.1

DLLを作成しながら利用方法がわからないって、、いったいどうやって 作ったんでしょ^^;^^; VC6でATLを使うのは、非常にめんどいです。 内容を技術的に把握してないと、まず、つかえません。 また、『DLLのクラスを利用』と記述していますが、 そもそもCOMのDLLはそのような使い方をするものではありません。 普通のCOMでないDLLで、クラスをexportする方法みたいな話ですか? もう少し具体的な質問でお願いできればと。。

関連するQ&A

  • VC6でDLL(COM+)作成中にエラーが出ました。

    VC6でATL COM AppWizardでDLLを作成しています。 インターフェースメソッドを追加したところ、 (1)の場合はうまくいきましたが、(2)の場合は、エラーと警告が2つ出ました。 理屈がわかっていないので対処方法がわからないのですが、何が原因なのでしょうか? やりたいことは、戻り値1つでなく、3つの戻り値が必要で、 引数4つのうち、最初は関数へ計算の元となる文字列を送り、残りの3つはint型ポインタを与えて、関数内で結果をセットし、呼び出し元でも使えるようにしたいので、このようにしました。通常のC?ではうまくいっていました。 あと読んだ方が良い書籍も探しています。 COM+?について詳しい方、教えてください。 ※COM+というのはVB2005やC#でも健在なのでしょうか? (1) 戻り値のタイプ: HRESULT メソッド名: Test1 パラメータ: なし (2) 戻り値のタイプ: HRESULT メソッド名: Test2 パラメータ: [in] char* a, [in,out] int* b, [in,out] int* c, [in,out] int* d →※ここが間違い? ===== エラー内容 ===== error C2259: 'CComObject<class CTest>' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 warning C4259: 'long __stdcall ITest::Test2(unsigned char *,int *,int *,int *)' : 純粋仮想関数は定義されていません。 'Test2' の宣言を確認してください。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 error C2259: 'CComObject<class CTest>' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 warning C4259: 'long __stdcall ITest::Test2(unsigned char *,int *,int *,int *)' : 純粋仮想関数は定義されていません。 'Test2' の宣言を確認してください。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中

  • VBA,ASPなどから呼び出せるDLLの作成

    DLLを作成したいです。 開発環境 OS:WindowsXP HOME SP2 IDE:Visual C++ 2005 作成したいのはBASP21 DLL(http://www.hi-ho.ne.jp/babaq/basp21.html)のようなVBA、VBScriptから呼び出せるDLLです。 以下のように作成しました。 1 新規プロジェクト>ATLプロジェクト(プロジェクト名:dlltest)   (ダイナミックリンクライブラリ・非属性、デフォルト) 2 プロジェクト>クラスの追加>ATLシンプルオブジェクト(クラス名:cl1、オプションはデフォルト) 3 作成されたインターフェースIcl1を右クリックしてメソッドを追加   メソッド名:mtest1 質問したいのはこのメソッドで値を呼び出し側に返す方法です。 COMの仕様で返り値はHRESULTと聞きました。 LONG型の引数を受け取って2倍した値を返すメソッドみたいな簡単な サンプルの記述方法を教えてください。お願いします。

  • DLL作成について

    DLL作成の機会がいろいろ調べているのですが、教えていただきたいことがあります。 1.インポートライブラリについて  Windowsで暗黙的リンクでDLLをリンクする場合、  インポートライブラリを利用するようですが、  これは、DLL内のポインタと関数名を紐付けるような  役割だと想定しています。  仮に関数等ヘッダーで公開されている部分以外で  DLLを更新した場合、インポートライブラリも  再リンクするような場面があるのでしょうか。  特に再リンクしなくてもDLLの更新が反映されたので・・ 2.DLLのクラスの継承について  DLL内に作成したクラスを継承することは不可能ですかね。  DLLが更新された場合、インスタンスのイメージが違うため  newやdeleteの処理で当初リンクしたインスタンスのイメージで  行いますよね。

  • DLLの違いについて

    MFC AppWizard(dll)で作成したDLLとWin32 Dynamic-Link Libraryで作成したDLLの違いは何でしょうか?客先に「MFCで作ってないんですか?」と聞かれて何が違うのかなと思いまして。不慣れなものですみません。

  • .NET VC++ DLLの作成方法

    以前VC++6.0でDLLを作成しました。 このときに新規作成の項目からWin32 Dynamic Link Libraryを 選択して作成したのですが、 .NET2003で同様のものを作成したい場合 どのプロジェクトから作成するとできるのでしょうか? .NETになったことで仕様が変更されて同じようにDLLを作成することは できませんか? どなたかお教えください。よろしくおねがいします。

  • DLLについて

    VC++でDLLを作成しようとしているのですがいくつか判らない点があります。 1. スタティックライブラリとスタティックリンクライブラリの違い。この二つの用語の違いが分かりません。 2.VBからVC++で作成したDLLを使用するときには.libファイルは必要ないのでしょうか。使用しなくても、使うことができたので。

  • vc++6.0にてdllとlibraryを作成する方法

    vc++6.0にてdllとlibraryを作成する方法 を知りたいのですが、dllとlibraryを それぞれ新規プロジェクトで立ち上げれば 作成できるのですが、dllを作成した際に libraryも作成(自動)されるようなことは できないのでしょうか?

  • BCBでVC++のDLLを利用するために

    C++Builder5で、VC++で作ったDLLを利用する必要に駆られてしまいました。 提供されているのはDLL本体とヘッダの2点で、BCBからリンクするために、implibを使ってdllからlibの作成をし、プロジェクトに加え、ヘッダをインクルードしました。続けて試しにコードを書いたところ、 '外部シンボル_initialize_libraryが未解決' との表示。(initialize_libraryとはDLL内にある関数です。) 調べてみたところ、 1.呼び出し規約は標準で __stdcall 2.VC++ では、_ がシンボル名の頭に付く 3.Builder ではつかない これで食い違いが生じているんだと思うのですが、更に調べると、モジュール定義ファイルにて再定義をすれば良いとの結論になりました。 BorlandのFAQも見たのですが、書式が理解できなくて・・・そこで質問させて頂きたいのですが、単純にproject名.defを作って、 >IMPORTS >initialize_library=_initialize_library とやってプロジェクトに加えれば良いのでしょうか? ソース本体にextern "C" というのも必要なようですが、こちらの記述も教えて頂けたら嬉しいです。

  • BCBで作成したDLLを、VC++で静的リンクさせる方法

    BCBで作成したDLLを、VC++で静的リンクさせる方法 Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように LIBファイルに変換したいのですが、上手くいきません。 下記の手順を踏みました。 1. BCBでDLL作成   「VC++スタイルのDLL」で作成、   「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず 2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成   (IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた) 3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成   (LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた) 4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー 5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に   作成したlibファイルを追加 VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ///////////////////////////////////////////////////////////////////////////////// BCBとVC++のバージョンは、下記の通りです。 BCB Professional 6.0 VC++ 6.0 ちなみに、同じDLLを動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • VB6で作成したDLLをVC6で使用する方法

    VB6で作成したDLLをVC6で使用できなくて困っています。 以下にトライしたことを示します。 (1) VB6でTRUEを返すだけの関数を入れたActiveX DLLを作成 (2) VC6のLoadLibraryに成功(戻り値がNULL以外) (3) VC6のGetProcAddressに失敗(戻り値がNULL) (4) VC.NET付属のDumpbinユーティリティでは(1)で作成した関数が表示されない。 何が悪いのでしょうか。 宜しくお願いします。

専門家に質問してみよう