2017-07-19 10 views
1

ビルドすることができないC++ビジュアルスタジオプロジェクトを継承しました。問題は、 "CreateEvent"のような多くのAPIコールでchar *入力が与えられているが、エラーコードには "LPCWSTR"が必要であるということです。文字通り何百行ものコード行に似たような苦情があります。ビジュアルスタジオC++ UNICODE関連のトラブルシューティングループ

一般的な解決策は、私がUnicode文字セットを使用しないようにする必要があると思われることです。しかし、私がこれを行うと、 "非Unicode文字セットのMFCプロジェクトをビルドする"エラーが発生します。助けを探して、一般的な解決策は、私はUnicode文字セットを有効にする必要があるようだ。

私はそうすれば、私はホーズしています。ここで正しい動きは何ですか?

+0

これは役に立ちます。https://stackoverflow.com/questions/19715144/how-to-convert-char-to-lpcwstr –

+0

ワイド文字を正しく使用するには、コードベース全体を更新する必要があります。実際には、これは15年前に行われたはずです。 – VTT

+0

"char *"はUTF-8ではまだ標準です。ソフトウェアエンジニアの大部分は "wchar_t *"を嫌い、各文字列式にLを追加します。マイクロソフト社がプログラマーにUNICODEを使用させる唯一の会社だと思われます。マイクロソフトはMBCSを中止したいと思っていますが、いつかすぐに起こるとは思われません。 – JazzSoft

答えて

2

CreateEvent自体は実際には(少なくとも私はで動作するように使用されるすべてのWindowsプロジェクトで)WinAPIののsynchapi.h

#ifdef UNICODE 
#define CreateEvent CreateEventW 
#else 
#define CreateEvent CreateEventA 
#endif // !UNICODE 

通常、この中で宣言されている2つの機能の一つであることが、マクロ#define「D以外の何ものでもありませんUNICODEマクロが定義されているので、LPCWSTR(換言すればconst wchar_t*)のwords引数を受け入れるCreateEventW関数で動作します。これはUTF-16文字列リテラルであると考えられています。 プロジェクトで定義されていない場合は、LPCSTR引数(実際にはconst char*に相当)を受け入れ、それをASCII文字列として扱いますCreateEventAを使用します。

あなたのプロジェクトは、ASCII文字列のみをサポートするように設定されているようです。そして、これは廃止されました:)以前は、このような状況のためにビルドを有効にする特別なアドオンがありました。これはMFC MBCS DLL Add-onと呼ばれています。しかし、私はそれがまだ利用可能であることを100%確信していません、ここにa question here at StackOverflow about thatです。

このようなアドオンやそのような代替ソリューションが見つからない場合は、コンパイルするための唯一の方法は、プロジェクトをUnicode文字列に移植することです。実際には、回避策が見つかったとしても、このプロジェクトを今後も維持する場合は、このような回避策がいつでも存在する可能性があるため、バックログにこのアクティビティを追加することをお勧めします。

いずれにしても、最終結果について知ることは興味深いでしょう。

+0

私はVisual Studio 2017を使用していますが、MBCSアドオンをインストールする必要はありませんでしたこれは、現時点でMicrosoftがMBCSのサポートが必要であることを認識したことを意味します。 – JazzSoft

0

Microsoft Visual Studio 2013を使用しているようです。このバージョンは、MBCS版のMFCなしで​​配布されました。一方、Visual Studio 2015および2017にはMBCS版のMFCが付属しています。

あなたはMBCSを使用してプロジェクトをビルドしたい場合は、これをダウンロードしてインストールする必要があります。

https://www.microsoft.com/en-us/download/details.aspx?id=40770

他のオプションは、Unicodeにプロジェクト全体を変換しているが、これは多くの作業することができあなたのプロジェクトに応じて。

+0

私はこの全く同じ問題をVS2015で持っています – n4rzul

関連する問題