vc++ 6.0 でUNICODEでコンパイルするには

解決


LIS  2009-07-17 06:16:34  No: 70627

こんにちは。
VC++ 6.0 のSDK (非MFC)でウィンドウズプログラミングをしています。

UNICODEでコンパイルしたいと思い、
_UNICODE, UNICODE を定義し、_MBSC を定義から除外し、
エントリポイントシンボルにwWinMainCRTStartupを指定しました。

前々から、TEXTマクロの使用とTCHAR, LPTSTR, LPCTSTR の使用を心がけて
いたのですが、fopen/fgets と _makepath/_splitpath と GetProcAddress が
対応できていないようで、コンパイルが通りません。

WCHAR.H を定義すると、 _tfopen や _tmakepath が使えるようになると
ネットに書いてあったのですが、定義しても
「見つからない」とコンパイルエラーになってしまいます。

(WCHAR.Hを見て見ても、なぜか_tfopen や _tmakepathはありませんでした。
  ですで、コンパイルが通らないのは当たり前なのですが、
  ネットのサンプルとどう違うのか分かりません)

#define  VC_EXTRALEAN

#include    <wchar.h>
#include   <stdlib.h>
#include    <stdio.h>
#include  <windows.h>

#include <exception>
#include  <typeinfo>
#include <stdexcept>
#include       <new>
#include <algorithm>
#include       <map>
#include       <set>
#include      <list>
#include     <stack>
#include    <string>
#include    <vector>

こんな感じで使っておりますが、間違っていること・足りていないこと
などご存知でしたらご教示下さい。
宜しくお願いします。

ちなみに std::string は
namespace std {
  typedef basic_string<TCHAR> tstring;
}
として、tstring を使うことで回避致しました。


うー  2009-07-17 08:46:20  No: 70628

wchar.hじゃなくてtchar.hじゃありませんでしたっけ。


subaru  2009-07-17 10:11:40  No: 70629

GetProcAddress はもともと LPCSTR を引数に取るものしか存在しません。


LIS  2009-07-18 08:55:08  No: 70630

うー様、subaru様、ありがとうございます。

tchar.h でした!!
なぜか VC6 UNICODE などで検索しても見つけられませんでした。
探し方が下手だったようです。ありがとうございました。

> GetProcAddress はもともと LPCSTR を引数に取るものしか

これについては、みなさんどう対処しているのでしょうか?
※自作しているというサンプルは見つけられました

よろしくお願いします。


LIS  2009-07-18 09:40:28  No: 70631

すみません。

普通は、GetProcAddress に TEXT() を使用しなければいいんですよね。

ただ私の場合はエクスポート関数名を UNICODE で受け取っておりまして、
そこは変更出来ませんので、
WideCharToMultiByte
を使って変換するということになるのですね。

すみません、どうもありがとうございました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加