我有一个类为TCHAR*定义了一个用户定义的运算符,就像这样
CMyClass::operator const TCHAR*() const
{
// returns text as const TCHAR*
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做类似的事情
CMyClass myClass;
_tprintf(_T("%s"), myClass);
Run Code Online (Sandbox Code Playgroud)
甚至
_tprintf(_T("%s"), CMyClass(value));
Run Code Online (Sandbox Code Playgroud)
但是在尝试时,printf总是打印(null)而不是值.我也尝试了一个普通的char*运算符,以及const等变量.它只有在我明确调用运算符或执行转换时才能正常工作
_tprintf(_T("%s\n"), (const TCHAR*)myClass);
_tprintf(_T("%s\n"), myClass.operator const TCHAR *());
Run Code Online (Sandbox Code Playgroud)
但是,我不想演员.怎么能实现这一目标?
注意,一种可能性是创建一个具有const TCHAR*参数的函数,以便它强制调用运算符TCHAR*,但这也是我不想实现的.
从我需要的 Win shell 执行命令
ShellExecuteA(NULL, "open", "http://stackoverflow.com", NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
现在我正在学习 Forgers Win32 教程,我发现 A 后缀是必要的,以防止将垃圾打印到屏幕上。我知道这与我的操作系统默认的字符格式有关。如果我可以“规范化”我的操作系统,那可能是最好的解决方案,因为RegisterClassExA无论我在第二个示例中使用多少个 *A 函数,我都会返回 NULL (下面使用我添加的 *A 后缀的 llloottttssss 进行复制)
#include <windows.h>
const wchar_t g_szClassName[] = L"myWindowClass";
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{/*...*/
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc …Run Code Online (Sandbox Code Playgroud) 这是一个我从未想过的老问题 - 想知道这里是否有人可能碰巧知道你头脑中的答案......
在我们软件的某些部分 (MFC/Win32/MBCS) 中,我的代码只会收到
TTN_NEEDTEXTW
在我们软件的其他部分,我会收到 MBCS 正确消息
TTN_NEEDTEXTA
对我来说完全是无稽之谈。
我了解我们的软件是否可以编译为 Unicode(我们设置为使用多字节字符集)。并且我有一种模糊的记忆,每个窗口都可以构建 Unicode 或不构建,虽然这是一个模糊的记忆,没有具体的内容。
有谁知道为什么我们会在我们的代码中的某些地方收到宽版本消息,尽管被编译为多字节?
笔记:
如何在VC++中将字符串转换为tchar?
string internetprotocol="127.4.5.6";
TCHAR szProxyAddr[16];
Run Code Online (Sandbox Code Playgroud)
我想设置:
szProxyAddr=internetprotocol;
我怎么能这样做?
请有人解释为什么这不起作用?
char *test = "test";
_TCHAR *szTest = CA2W(test);
Run Code Online (Sandbox Code Playgroud)
请告诉我我应该做什么。
它没有给我同等的文字,而是给了我:
????????????????????????????????
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我在我的代码顶部附近声明一个字符串变量来定义我的窗口类的名称,我在调用RegisterClassEx,CreateWindowEx等时使用它.现在,我知道LPCTSTR是一个typedef并且最终会跟进到TCHAR(根据是否定义了UNICODE,以及CHAR或WCHAR),但我想知道使用它是否更好:
static LPCTSTR szWindowClass = TEXT("MyApp");
Run Code Online (Sandbox Code Playgroud)
或这个:
static const TCHAR szWindowClass[] = TEXT("MyApp");
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢使用LPCTSTR来自JavaScript,PHP,C#背景我从未真正考虑将字符串声明为字符数组.
但实际上使用一个优于另一个是否有任何优势,或者它实际上甚至对我选择哪一个都没有影响?
谢谢你,先进的,你的答案.
我有一个TCHAR定义如下:
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
Run Code Online (Sandbox Code Playgroud)
我想如下:
if(szProcessName == "NDSClient.exe")
{
}
Run Code Online (Sandbox Code Playgroud)
但后来我得到了错误:
错误C2446:==:没有从const char*到TCHAR的转换*
错误C2440:'==':无法从'const char [14]'转换为'TCHAR [260]'
我在这里问了一个涉及C ++和C#通信的问题。问题得到解决,但导致了新问题。
这将返回一个字符串(C#)
return Marshal.PtrToStringAnsi(decryptsn(InpData));
Run Code Online (Sandbox Code Playgroud)
这需要一个TCHAR *(C ++)
lpAlpha2[0] = Company::Pins::Bank::Decryption::Decrypt::Decryption("123456");
Run Code Online (Sandbox Code Playgroud)
我已经用谷歌搜索了如何解决这个问题,但是我不确定为什么字符串上有一个胡萝卜(^)。最好将String的返回值更改为C ++可以接受的其他值吗?还是我需要在分配值之前进行转换?
我一直在努力编写一个解决方案,从c ++ win32console和c ++ dll中解脱出来.我终于设法让他们说话没有链接器错误(所以我假设两者都是完全托管的c ++/CLI项目)但是当我运行控制台时,我得到以下错误.
Company.Pins.Bank.Win32Console.exe中0x03f71849处的未处理异常:0xC0000005:访问冲突写入位置0x00000001.
控制台还显示以下内容
未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例.at wmain in c:...\win32console.cpp:第20行_wmainCRTStartup()
但我假设这是因为未处理的异常.
跟踪此错误以及我可以在下面的代码块中执行返回时发生错误.(由返回链接的方法似乎一步一步很好,只是在返回它似乎变坏.)以防万一你没有注意到,我没有自己编写下面的代码,它是由visual studio生成的.
#ifdef WPRFLAG
int wmainCRTStartup(
#else /* WPRFLAG */
int mainCRTStartup(
#endif /* WPRFLAG */
#endif /* _WINMAIN_ */
void
)
{
/*
* The /GS security cookie must be initialized before any exception
* handling targetting the current image is registered. No function
* using exception handling can be called in the current image until
* after __security_init_cookie has been called.
*/
__security_init_cookie();
return …Run Code Online (Sandbox Code Playgroud) 我是 Windows 上的 C++ 新手。你能告诉我如何转换unsigned int为TCHAR *吗?