2017-07-31 3 views
0

私はソースを持って、そして次のようなタイプの「CSTR」への参照があるポートへのLinuxからWindowsの10のプログラムをしようとしている:プログラム:使用CSTR

cstr filename = sourceline->sourcefile; 

Windows SDKでこのタイプが定義されているとは思われません(そのコードでは、定義されていないとフラグが立てられています)。

std::string filename; 

cstrには私が気付いていない他のプロパティがありますか?

+3

なぜ、元のプラットフォームで 'cstr' *が実際に*何を探しているのですか? (標準型ではありません) –

+3

'cstr'の定義はどこから得られますか? –

+0

私は実際にそれを見つけることができませんでした:それはgccライブラリのリファレンスには載っていません。私がgoogleしたら、同じことではないc_strとCStrについて議論します。ここの誰かがどこから来たのか分かっていたと思っていました。 – Nester

答えて

0

あなたのcstrタイプの詳細はわかりません。しかし、コードをWindowsに移植するときは、ファイル名の文字列、特にのエンコーディングに注意する必要があります。

LinuxではUTF-8を使用するのが一般的です。 Windowsでは"native" Win32 APIで使用されるUnicodeエンコードはUTF-16です。したがって、std::stringを使用してUTF-8エンコードされた文字列をLinuxのC++コードに格納する場合は、それらをWin32 APIに渡す前に、UTF-8からUTF-16をWindowsで変換することを忘れないでください。

Windows固有のC++コード(またはATLのCStringWクラス)でも使用できますが、Windows固有の部分では非標準の移植不可能なクラスを使用していますコードは問題ではありません)。

クロスプラットフォームの共通パターンコードの移植可能なクロスプラットフォーム部分でUTF-8を使用し、Windows API境界でUTF-16に変換するC++コード。

さらに、興味のあるthis MSDN Magazine article "Unicode Encoding Conversions with STL Strings and Win32 APIs"があります。

関連する問題