タイトルの通りのことは可能でしょうか?
具体的に言うと、ダイアログアプリでMBCSで作ってます。
これにCOMで作られた機能を組み込もうとしたら
COMで作ったソースがUNICODE(WCHAR?)になってて
コンパイルしたらMFCのライブラリが競合しますと言われます。
初心者なので言ってることが変かもしれませんが
よろしくお願いします。
VCでCOM(OCX)の作成するとビルド環境にUNICODE版とそうでない版が出てきますが、
UNICODE版でない方のOCXは手に入らないのですか?
Win98とかWinMeとかで動かさないならダイアログアプリの方をUNICODEにする方法も
あると思いますけれど。
レスありがとうございます。
COMだからUNICODEではないのですね。
しかし、以下のコードがエラーになってしまいます。
プロジェクトはUNICODEではないので
LPWSTRもTCHARもcharになると思うのですが…
m_aaa.szItemID = new TCHAR[100];
(m_aaa.szItemIDはLPWSTRとなっています。)
エラー内容:error C2440: '=' : 'TCHAR *' から 'LPWSTR' に変換できません。
このエラーを無くすにはどうすればいいのでしょうか?
あと、ダイアログをUNICODEにするのは大変なので
UNICODEの機能を何とかしたいです。
> LPWSTRもTCHARもcharになると思うのですが…
LPWSTRは wchar_t* です。
(farはとりあえず無視で)
LPTSTR は LPWSTR か LPSTR で切り替わると思いますけど。
> LPWSTRもTCHARもcharになると思うのですが…
LPWSTRはUnicodeでもMBCSでもWCHARのはずです。
ぅ、Blueさんとかぶった・・・orz
> LPWSTRはUnicodeでもMBCSでもWCHARのはずです。
WCHAR *のはずです。
ポインタです。*が抜けてました。すみません・・・orz
レスありがとうございます。
>m_aaa.szItemID = new TCHAR[100];
左側が市販品のヘッダファイルに定義されてるので
右側をWCHARにする必要があるということですね。
これでエラーは消えました。
m_aaa.szItemID = new WCHAR[100];
COM機能のインターフェース部分を
全てWCHAR対応にすることで解決しようと思います。
新たなエラーが出てしまいました。
nafxcwd.lib(afxmem.obj) : error LNK2005:
void * __cdecl operator new(unsigned int) (??2@YAPAXI@Z) は既に LIBCMTD.lib
(new.obj) で定義されています。
nafxcwd.lib(afxmem.obj) : error LNK2005:
void __cdecl operator delete(void *) (??3@YAXPAX@Z) は既に LIBCMTD.lib
(dbgdel.obj) で定義されています。
nafxcwd.lib(afxmem.obj) : error LNK2005:
void * __cdecl operator new[](unsigned int) (??_U@YAPAXI@Z) は既に LIBCMTD.lib
(new2.obj) で定義されています。
nafxcwd.lib(afxmem.obj) : error LNK2005:
void __cdecl operator delete[](void *) (??_V@YAXPAX@Z) は既に LIBCMTD.lib
(delete2.obj) で定義されています。
これはどうしたらいいんでしょうか…
# この情報だけでは何とも…
ヘッダファイルに定義を書いていませんか?
ヘッダは宣言のみ、実装は.CPPファイルに、宣言と定義を分離しましょう。
市販品と自作プログラムでリンクしているCRTが違うんでない?
[PRB] C ランタイム ライブラリを MFC ライブラリより先にリンクしたときの LNK2005
エラー
http://support.microsoft.com/default.aspx?scid=kb;ja;148652
これだと思いますが。
# LNK2005でググると最初に出てきます。