いつもお世話になっています。
環境は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__
どうしたら、いいのでしょうか?
ご教授お願いします。
__declspec
dllexport
dllimport
この辺りを調べるとよいかも・・
「どこで」「なにが」定義されていないかって情報は
出てないんですか?
StdAfx.hの最後に(#endifの直前あたり)
#include <imm.h>
#pragma comment( lib, imm32.lib )
の2行を追加するというのは駄目ですか?
私はこれで上手くいったのですが。
みなさん、レスありがとうございます。
いもちぃさんの言うメッセージはたぶん、
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の起動をしようと思います。
しかし、やりたいです。
アドバイスをお願いします。
しまったよく読んでなかった・・
前の発言は、忘れてください
>今日中にできなかったら、あきらめて、EXEからEXEの起動をしようと思います。
>しかし、やりたいです。
こういう事は、書かないほうがよろしいかと・・
だったらそうすればってことになってしまうので・・
IMECtrlクラスをどのようにエクスポート・インポートさせていますか?
定義しているDLLでインクルードする場合と、参照するだけのDLLでインクルードする場合の宣
言の仕方をきちん区別したヘッダファイルにしないと、EXEでビルドできても、DLLでは上手く
いかないこともあります。もしAFX_EXT_CLASSなどを使っていたら、間違いなく失敗します。
>IMECtrl.obj : error LNK2005: _ExtRawDllMain@12 はすでに TEST.obj で
>定義されています
>だと思います。IMECtrlは自作のクラスで、このヘッダーファイルに
これがあれば最初から、
1.ExtRawDllMain関数がどこに定義されてるか調べて
2.その実体が複数ないかチェック
すればよかったのだと思いますが・・・。
回答は外れてるかもしれません。(--;
みなさん、すいません。
DLLの作成方法をよく学んでみます。
解決方法があったら記載します。