1

古いプラグインを変更して新しいプラグインを作成しようとしています (C++ および Visual Studio 2019)。コンパイルすると、TEXT を赤でマークする次のエラーが表示されます。

E0144: タイプ "const wchar_t *" の値を使用して、タイプ LPTSTR のエンティティを初期化することはできません

LPTSTR process_name = TEXT("rFactor2.exe");
module_address = GetModuleBase(process_name, pID);

私が調査したところ、これを示唆する同様の投稿がありました。

LPTSTR process_name = foo(TEXT("rFactor2.exe"));

そして今、次のエラーが表示されます。

E0020: 識別子 "foo" が定義されていません

誰かがLPTSTR形式で変数を作成する方法を教えてもらえますか(それGetModuleBaseは期待されるタイプです)?

4

2 に答える 2

1

LPTSTRとして定義されTCHAR*ます。必要なのは const ポインターです。LPCTSTR次のように定義されている を使用できますTCHAR const*

LPCTSTR process_name = TEXT("rFactor2.exe");

関数に非 const ポインターが必要な場合は、コピーを作成できます。

TCHAR process_name[] = TEXT("rFactor2.exe");

文字列リテラルと配列の寿命は同じではないことに注意してください。


GetModuleBase期待するタイプです

レガシ コードで作業していることを考えると、関数が非 const ポインターを取り、それらを変更しない可能性があります。それについて確信があり、先に進んでそれらの関数シグネチャを const-correct に修正できない場合は、型キャストを使用できます。これは最後の手段としてのみ実行してください。

auto process_name = const_cast<LPTSTR>(TEXT("rFactor2.exe"));

推奨読書:

于 2021-01-09T11:19:49.710 に答える