MFCの拡張DLLが別のDLLをリンクするには?

[戻る]
クリリン 2002/04/10(水) 16:52:01
いつもお世話になっています。
環境はWin2000 Pro(SP2),VC++6.0(SP5),MFC

現在、今まで[exe]だったのを[DLL]にする作業をしております。
DLLのプロジェyクトはMFCの拡張DLLです。
今まで、exeだった時は、IME関連などのDLLは正常にリンクしていました。
しかし、DLL化し、コンパイルをかけると、「すでに定義されています」のエラーメッセージ
が表示され、コンパイルが正常終了しません。

ちなみにIMEのリンクはこうしています。
#ifndef __IMECTRL__
#define __IMECTRL__
  #pragma comment( lib, "imm32.lib" )
  #include "imm.h"
#endif // __IMECTRL__

どうしたら、いいのでしょうか?
ご教授お願いします。

不良PG 2002/04/10(水) 16:58:34
__declspec
  dllexport
  dllimport
この辺りを調べるとよいかも・・

いもちぃ 2002/04/10(水) 17:14:36
「どこで」「なにが」定義されていないかって情報は
出てないんですか?

sara 2002/04/10(水) 17:14:53
StdAfx.hの最後に(#endifの直前あたり)

#include <imm.h">
#pragma comment( lib, "imm32.lib" )

の2行を追加するというのは駄目ですか?
私はこれで上手くいったのですが。

クリリン 2002/04/10(水) 17:24:43
みなさん、レスありがとうございます。

いもちぃさんの言うメッセージはたぶん、
IMECtrl.obj : error LNK2005: _ExtRawDllMain@12 はすでに TEST.obj で定義されていま
す
だと思います。IMECtrlは自作のクラスで、このヘッダーファイルに
#ifndef __IMECTRL__
#define __IMECTRL__
  #pragma comment( lib, "imm32.lib" )
  #include "imm.h"
#endif // __IMECTRL__
としています。

で、saraさんのようにやってみましたが、結果は同じでした。

今日中にできなかったら、あきらめて、EXEからEXEの起動をしようと思います。
しかし、やりたいです。
アドバイスをお願いします。

不良PG 2002/04/10(水) 18:12:31
しまったよく読んでなかった・・
前の発言は、忘れてください

>今日中にできなかったら、あきらめて、EXEからEXEの起動をしようと思います。
>しかし、やりたいです。

こういう事は、書かないほうがよろしいかと・・
だったらそうすればってことになってしまうので・・

sara 2002/04/10(水) 18:15:16
IMECtrlクラスをどのようにエクスポート・インポートさせていますか?
定義しているDLLでインクルードする場合と、参照するだけのDLLでインクルードする場合の宣
言の仕方をきちん区別したヘッダファイルにしないと、EXEでビルドできても、DLLでは上手く
いかないこともあります。もしAFX_EXT_CLASSなどを使っていたら、間違いなく失敗します。

いもちぃ 2002/04/10(水) 18:21:22
>IMECtrl.obj : error LNK2005: _ExtRawDllMain@12 はすでに TEST.obj で
>定義されています
>だと思います。IMECtrlは自作のクラスで、このヘッダーファイルに

これがあれば最初から、
1.ExtRawDllMain関数がどこに定義されてるか調べて
2.その実体が複数ないかチェック
すればよかったのだと思いますが・・・。

回答は外れてるかもしれません。(−−;

クリリン 2002/04/10(水) 21:00:30
みなさん、すいません。
DLLの作成方法をよく学んでみます。
解決方法があったら記載します。

古いスレッドには追加発言できません。