自作ライブラリの文字セットを両対応にしたが、上手くいかない
前回質問させて頂いたのですが、こちらの不手際でソース内容の不十分や誤字や脱字が目立ちましたので、再度質問をさせて頂きます。申し訳ありません。
今回自作ライブラリ内に、ウインドウ作成補助用クラスを作成したいと思っております。
そこでUnicode、マルチバイト文字両対応にするべく作業を進めていたのですが、ある所でどうしても上手く行かず、どうしたものかと困っております。
自作ライブラリは静的リンクですので、dllの形ではありません。
概要は以下の通りです。
1.
Unicode用関数とマルチバイト用関数は分けれらており、UNICODEマクロの有無によって使用する関数を自動的にわけています。
2.
自作ライブラリと、それを使用するプロジェクト側の文字セットが違うと、それぞれ上手くいかない。
ライブラリがUnicodeセット、使用するプロジェクトがマルチバイトだと文字化け。
ライブラリがマルチバイト、使用するプロジェクトがUnicodeセットだとchar型と認識されて2文字目にNULLが入り、1文字しか表示されない。
3.
ブレークを当てると、使用するプロジェクト側の文字セットに合った関数にはちゃんと飛んでいます。
以下文字数の関係から、ソースURLを記載させて頂きます。
全文ですので多少冗長になってしまいますが、宜しくお願い致します。
ヘッダー
http://blog-imgs-26.fc2.com/b/a/l/balmysoft/CreateWindowh.txt
実装部
http://blog-imgs-26.fc2.com/b/a/l/balmysoft/CreateWindowcpp.txt
プロジェクトでの使用法は
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
HWND hWnd;
BalmyWindows::CCreateWindow cw;
cw.SimpleCreateWindow( &hWnd,
hInst,
0,
0,
640,
480,
false,
_T("Hello"),
NULL,
NULL );
}
このような形です。
これだけでは思い描いた形には至らないのでしょうか?
もちろんプロジェクト側とライブラリ側との文字セットを同一にすれば上手くいきます
ライブラリとそれを使用するプロジェクトの文字セットが違ってしまうと、上手くいかないようです。
ライブラリを作成した時点でWindowsAPI側がUNICODEマクロの影響を受け、静的に固定されてしまうものなのでしょうか?
あまりコアな部分は詳しくなく、分からないのですが、APIであるCreateWindowを明示的にCreateWindowWやCreateWindowAなどと使いわけているのに上手くいかないのは疑問です。。。
どうにか、この問題を避ける手立てはあるのでしょうか?
長くなってしまい、大変申し訳ありません。
もしよろしければ、どなたか御教示頂けませんでしょうか。
何卒、宜しくお願い致します。
お礼
すいません。間違ってました。VBとC#はUnicode文字だけでした。 VS Express 2013は、C++は文字セットの切り替えは従来通りできます。 ありがとうございました。
補足
情報ありがとうございます。 後、VS Express 2013なのですが、VBとC++は従来のVS2012通り、文字セットの切り替えはできるようなのですが、 C#は無くなっています。これは切り替えられないのでしょうか?