Visual Studio .NET 2003 を使って、Win32 アプリケーションウィザードで
DLLを作成しようとしています。
ウィザードで作成されたテンプレートにC++のクラスができるのですが、
ここで、CString を使おうとすると
「error C2065: 'CString' : 定義されていない識別子です。」
というエラーになります。
Win32 DLLのC++ではCStringは使えないのでしょうか?
使えるとしたら何かエラー回避方法があるのでしょうか?
初心者で、色々試したのですがうまくいきません。
アドバイスいただけたら幸いです。
よろしくお願いします。
MFCを使うに設定していますか?
プロジェクトのプロパティの
[構成プロパティ]-[全般]-[MFC の使用法]
http://msdn2.microsoft.com/ja-jp/library/8x480de8(VS.80).aspx
また、ひつようなヘッダファイルをインクルードしていますか?
CStringならばcstringt.h。MFC全般を使うようであればafx.hでよさそう。
http://msdn2.microsoft.com/en-us/library/5bzxfsea(VS.80).aspx
Blueさん、早速にフォローいただきありがとうございます。
ご指摘のあった点を色々試してみていますが、うまくいきません。
[構成プロパティ]-[全般]-[MFC の使用法]は、
「スタティック ライブラリで MFC を使用する」
に設定して、afx.hをインクルードしたら
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxv_w32.h
(18) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must
not #include <windows.h>
というエラーになります。Win32 の場合はafx.hをインクルードしたら駄目なようです。
cstring.h をインクルードしようとすると、、
fatal error C1083: include ファイルを開けません。'cstring.h': No such file or
directory というエラーとなりインクルードできません。
というような状況です。
引き続き色々試してみますが、お気づきの点がありましたら教えてください。
よろしくお願いします。
afx.hをincludeに追加したなら、windows.hを直接includeしてはいけない。
エラーメッセージの通りです。プリコンパイルヘッダあたりにwindows.hの
inculudeがあるはずなので、置換してください。
# 少なくともDLLの「外部インターフェイス」にはやめておくべきかと>CString
Banさんありがとうございます。
ご指摘のありました通り、window.h を afx.h にしました所、
コンパイルはうまく通りました。
ところが、、、、
error LNK2005: _DllMain@12 は既に uafxcwd.lib(dllmodul.obj) で定義されています。
というエラーが出ました。
win32 ウィザードで出力されたのテンプレートにある DllMain のエントリー関数を
コメントアウトしましたら、コンパイル、リンクが通りました。
コンパイル、リンクは通過したのですが、これで出来上がったものはいったい正しいのか
どうか解りません。なにが出来上がったのか、初心者の私には理解できていません。
このような形で出来上がったDLLは正当に使えるのでしょうか?
すみませんが、アドバイスいただけませんでしょうか?
よろしくお願いします。
やはりMFCを使うのが前提であるのであれば、
最初からMFC DLLとしてプロジェクトを作り直したほうが無難だと思われます。
Blueさん、Banさんありがとうございました。
C++Builderでは同様のようなことができていたので、VC++でも同じように
組みあげようとしたのですが、色々未知のことがあり挫折してしまいそうです。
MFC DLL というのを検討してみます。
また助けてください。ありがとうございました。