問題タブ [tchar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - なぜTTN_NEEDTEXTWではなくTTN_NEEDTEXTAなのですか?
これは私が理解したことがない古い問題です - ここの誰かがたまたまあなたの頭の上から答えを知っているのではないかと思いました...
私たちのソフトウェア (MFC/Win32/MBCS) の一部では、私のコードは受信のみを行います
TTN_NEEDTEXTW
ソフトウェアの他の部分では、MBCS の正しいメッセージを受け取ります
TTN_NEEDTEXTA
私には意味がありません。
私たちのソフトウェアは Unicode でコンパイルできるかどうかは理解しています (マルチバイト文字セットを使用するように設定されています)。そして、各ウィンドウを Unicode で構成できるかどうかは漠然とした記憶がありますが、これは漠然とした記憶であり、具体的なものではありません。
マルチバイトとしてコンパイルされているにもかかわらず、コードの一部の場所でワイド バージョン メッセージが表示される理由を知っている人はいますか?
ノート:
- このメッセージは絶対に送信していません。おそらく ToolTip コントロールが送信しています。
- ある場所では間違いなく (W) メッセージだけを受け取り、他の場所では間違いなく (A) メッセージだけを受け取ります。
- 私は、すべてのコンパイル モジュールが Unicode ではなく MBCS を使用していること、およびビルド ターゲットがすべて Unicode ではなく MBCS を指定していることを確信しています。
- これは、CMainFrame でホストされているウィンドウとコントロールでのみ発生するようです。つまり、メイン フレームの外側にある Windows は、ナロー バージョンを使用できます (ダイアログ ボックスなど)。
c++ - `cout << argv [0]`は16進値を返しますか?
コード:
ご覧のとおり、標準のWin32コンソールアプリケーションです。
紛らわしい部分は、の値がargv[0]
として出力されること00035B88
です。
これは(AFAIK)コマンドラインオプションなしで実行されているためargv[]
、まだ値がないはずです。(またはこれが問題ですか?)
ただし、argv[]
はポインタ()として宣言されており、ポインタのアドレスが出力される_TCHAR*
と聞きました。cout
これは本当ですか?もしそうなら、どうすればの値を印刷/使用できますargv
か?
c++ - 同じ値の2つのTCHARを比較するとfalseになります
アプリケーションパスを確認しようとしていますが、指定されたパスでない場合は移動してください。コードはしっかりしているように感じますが、正しく機能しません。
ファイルが新しいパスにある場合でも、結果はpCheck!=xPathになります。
「新しい場所」メッセージボックスが表示されません。最初の2つのメッセージボックスが表示されるとき、パスは同じです...
c++ - Visual StudioでMicrosoftのtchar.hの装飾を無効にする方法は?
デフォルトでは、MicrosoftのVisual Studioはを使用しており、として<tchar.h>
定義main
されていint _tmain(int argc, _TCHAR* argv[])
ます。これは便利ですが、常にそうとは限りません。
デフォルトの新しいプロジェクトでこれを無効にする方法は?
アップデート
簡単なもので空のプロジェクトを作成したいmain
...
windows - マクロ内で「条件付き」で_T/TEXTを使用する方法はありますか?
この質問は、Visual C ++に固有のものです(Visual C ++ 2005以降を想定している場合があります)。
元のファイルへの変更を最小限に抑えてWin32でビルドおよび実行するために、unixoidシステム(特にFreeBSD)からプログラムのグルーコードを作成したいと思い.c
ます。さて、これのほとんどは簡単ですが、今私は問題に遭遇しました。tchar.h
ヘッダーとTCHAR
/を使用しており、元のコードでと呼び出し(を参照)_TCHAR
のグルーコードを作成する必要があります。使用するコードを作成することに同意しない場合でも、我慢してください。err
errx
err(3)
tchar.h
の呼び出しerr
とerrx
はおおよそ2つの形式を取ります。ここで、問題が発生します。
後者は、errno
(を使用してstrerror
)に格納されているエラーを出力します。
さて、問題は、文字列リテラルと文字列リテラルの両方を取ることができるジェネリックマクロを書く方法はありますNULL
か?変数が2番目のパラメーターとして渡されることを気にする必要はありません(そして気にしません) 。リテラル文字列のみです。NULL
もちろん、私の素朴な最初のアプローチは、 (可変個引数マクロを使用して!)fmt
として渡されたものを考慮していませんでした:NULL
今のところ、マクロを使用してこれを実現する方法はわかりません。これは、現時点では想像できないようなコンパイル時と実行時の条件の組み合わせが必要になるためです。ですから、これが考えられるかどうかにかかわらず、信頼できる答えを探しています。
私が今頼っている方法(より良いアプローチがない)は、andと同じようerr
にerrx
(const
)を受け入れるラッパー関数を記述し、それをdefinedでコンパイルされchar *
た場合に変換することです。これは、呼び出し元が(私のコンテキストでは正しい仮定です)の後に変数引数の文字列を渡すと仮定すると、機能するはずです。それ以外の場合は、MSが呼び出すように、「ANSI」文字列を処理するために、フォーマット文字列内に変換する必要があります。wchar_t *
_UNICODE
_TCHAR*
fmt
%s
%hs
winapi - 非 MFC、Win32 プロジェクト用の _T("") マクロ
私は Win32 プロジェクトを作成しており、TCHAR
どこでも使用しようとしています。しかし、これは非 MFC プロジェクトであるため、_T
定義していません。
プロジェクトでそれを取得するにはどうすればよいですか?
c - tchar を作成しようとしたときに非ワイド文字列から初期化された int-array
ここで次のように tchar 配列を作成しようとしています: TCHAR c_wText[100] = _T("string here");
しかし、コンパイル時にエラーメッセージが表示されます: int-array initialized from non-wide string
私は何か見落としてますか?
c++ - wstringをTCHARに変換する際の問題
私はプログラミングにかなり慣れていません。ユーザーが日付を入力し、その日付がファイルディレクトリ名に追加され、そのファイルディレクトリが検索されるプログラムを作成しようとしています。
これが私が以下で取り組んでいるものです。私はこれを行うための多くの機能を持っています..私はオンラインで検索し、いくつかの異なる方法で変換を試みましたが、それを理解していません....それで私は(私が知っていることは間違っています) static_cast。
たぶん私は正しく変換を行っていません...基本的にこれはWINAPIハンドラーを使用する関数にそれをスローします。私がそれを機能させることができるかどうかは、まったく別の話です...助けてくれてありがとう!
c++ - C++からvb.netへのTCHAR配列は変換を使用します
私はc++プログラマーではないので、このc++コードをvb.netに変換する必要があります。
私は本当に理解していません。私が知っているのは、これがIntからTCHAR配列への変換であるということだけです。
私は疑問に思っていました
うまくいくでしょうか、それとも何かが恋しいでしょうか?
どんな助けでもありがたいです!ありがとう :)
c - Visual C++ に存在する vswprintf() のバージョンの検出
_vscwprintf()
/ vswprintf()
(経由で_vsctprintf()
/ ) を使用して、 ed バッファー_vstprintf()
に任意の長さの書式設定された文字列を作成するプロジェクトがあります。malloc()
Visual C++ 2008 でプロジェクトを開始したとき、次の_vstprintf()
3 つのパラメーターを使用しました。
しかし、Visual C++ 2012 で戻ってきたとき、プロジェクトをしばらく離れた後、MS が関数を変更して 4 つのパラメーターを取るようになっていることがわかりました。
コードを Visual C++ 2008、2010、および 2012 でビルドできるようにしたいと考えています (Linux および Solaris にも移植可能です)。
#ifdef
関数の 3 パラメーターまたは 4 パラメーター バージョンで正しくビルドできるように、チェックできるシンボルはありますか?
コンパイルしている Visual C++ のバージョンを示すシンボルがあると思いますが、これは正しい方法ですか? たとえば、新しいコンパイラが古い C ライブラリまたはランタイムでビルドできる可能性、またはその逆の可能性はありますか?
それが違いを生む場合、私のコードは実際にはC++ではなくCを使用しています。