无法在C++;Visual Studio 由于某种原因,我不能再在C++ CLR控制台应用程序中编译C文件。它在没有clr支持的情况下工作过,我也将我的项目转换为编译为/TP,但仍然不工作。任何帮助都将不胜感激 错误 斯诺基尔 斯诺基尔
无法在C++;Visual Studio 由于某种原因,我不能再在C++ CLR控制台应用程序中编译C文件。它在没有clr支持的情况下工作过,我也将我的项目转换为编译为/TP,但仍然不工作。任何帮助都将不胜感激 错误 斯诺基尔 斯诺基尔,c++,c,visual-studio,visual-studio-2015,clr,C++,C,Visual Studio,Visual Studio 2015,Clr,tagPROCESSENTRY32中的szExeFile声明为TCHAR,在编译时将字符集设置为“未设置”或“多字节”。将项目设置中的字符集设置为使用Unicode字符集解决此问题 另外,使用wcscmp来比较WCHAR类型。tagPROCESSENTRY32中的szExeFile声明为TCHAR,在编译时将字符集设置为“未设置”或“多字节”。将项目设置中的字符集设置为使用Unicode字符集解决此问题 另外,使用wcscmp来比较WCHAR类型。错误消息很清楚:您在这一行有一个错误: if (
tagPROCESSENTRY32
中的szExeFile
声明为TCHAR
,在编译时将字符集设置为“未设置”或“多字节”。将项目设置中的字符集设置为使用Unicode字符集解决此问题
另外,使用
wcscmp
来比较WCHAR类型。tagPROCESSENTRY32
中的szExeFile
声明为TCHAR
,在编译时将字符集设置为“未设置”或“多字节”。将项目设置中的字符集设置为使用Unicode字符集解决此问题
另外,使用
wcscmp
来比较WCHAR类型。错误消息很清楚:您在这一行有一个错误:
if (strcmp(pEntry.szExeFile, filename) == 0)
因为您的参数不是预期的
char*
类型,而是WCHAR*
类型。您应该改为使用,这基本上是相同的函数,但使用的是wchar\u t*
类型。错误信息很清楚:您在这一行有一个错误:
if (strcmp(pEntry.szExeFile, filename) == 0)
因为您的参数不是预期的
char*
类型,而是WCHAR*
类型。您应该改为使用,这基本上是相同的函数,但使用的是wchar\u t*
类型。您可以将wchar的每个实例更改为TCHAR,以便文本设置为“通用”,或者如前所述,将项目属性字符集更改为仅Unicode
void killProcessByName(TCHAR *filename)
/* ... */
if (_tcscmp(pEntry.szExeFile, filename) == 0) /* replaced strcmp */
/* ... */
#include <windows.h> /* needed in order to use TEXT() macro */
/* ... */
TCHAR *proccc = TEXT("firefox.exe"); /* TEXT() is a <windows.h> macro */
void killProcessByName(TCHAR*filename)
/* ... */
如果(_tcscmp(pEntry.szExeFile,filename)==0)/*替换了strcmp*/
/* ... */
#使用TEXT()宏时需要包含/*项*/
/* ... */
TCHAR*proccc=TEXT(“firefox.exe”);/*TEXT()是一个宏*/
如果涉及的函数不是WCHAR特定的,则在任何地方都使用TCHAR类型。这将允许项目设置生成ANSI/ASCII(未设置)或Unicode
请注意,Process32First和Process32Next使用TCHAR
这主要是针对传统的API函数,因为Windows 2000和更高版本的API函数在内部使用Unicode,根据需要将ANSI/ASCII转换为Unicode,而Windows NT和更早版本的API函数使用ANSI/ASCII
然而,通常许多或大多数文本文件(如源代码)是ANSI/ASCII而不是Unicode,在同一个程序中必须支持Unicode for Windows API,然后支持ANSI/ASCII for text files是很尴尬的,对于这些项目,我使用ANSI/ASCII
通过使用基于TCHAR的泛型类型,我可以与使用Unicode的项目和使用ANSI/ASCII的项目共享公共代码。您可以将WCHAR的每个实例更改为TCHAR,以便文本设置为“泛型”,或者如前所述,将项目属性字符集更改为仅使用Unicode
void killProcessByName(TCHAR *filename)
/* ... */
if (_tcscmp(pEntry.szExeFile, filename) == 0) /* replaced strcmp */
/* ... */
#include <windows.h> /* needed in order to use TEXT() macro */
/* ... */
TCHAR *proccc = TEXT("firefox.exe"); /* TEXT() is a <windows.h> macro */
void killProcessByName(TCHAR*filename)
/* ... */
如果(_tcscmp(pEntry.szExeFile,filename)==0)/*替换了strcmp*/
/* ... */
#使用TEXT()宏时需要包含/*项*/
/* ... */
TCHAR*proccc=TEXT(“firefox.exe”);/*TEXT()是一个宏*/
如果涉及的函数不是WCHAR特定的,则在任何地方都使用TCHAR类型。这将允许项目设置生成ANSI/ASCII(未设置)或Unicode
请注意,Process32First和Process32Next使用TCHAR
这主要是针对传统的API函数,因为Windows 2000和更高版本的API函数在内部使用Unicode,根据需要将ANSI/ASCII转换为Unicode,而Windows NT和更早版本的API函数使用ANSI/ASCII
然而,通常许多或大多数文本文件(如源代码)是ANSI/ASCII而不是Unicode,在同一个程序中必须支持Unicode for Windows API,然后支持ANSI/ASCII for text files是很尴尬的,对于这些项目,我使用ANSI/ASCII
通过使用基于TCHAR的泛型类型,我可以与使用Unicode的项目和使用ANSI/ASCII的项目共享公共代码。错误消息准确地告诉您错误所在
strcmp
接受一个char*
,您给它一个wchar\u t*
。您可能需要的是与strcmp基本相同的strcmp,只是它在wchar\u t*
上工作。错误消息会准确地告诉您出了什么问题strcmp
接受一个char*
,您给它一个wchar\u t*
。您可能想要的是基本上与strcmp相同的strcmp,只是它适用于wchar\u t*
。您指的是ANSI,而不是ASCII。ANSI表示线程的字符编码,可以来自程序、用户或操作系统。这不太可能是ASCII码。@TomBlodget-我更新了答案以显示两者。看看。你是说ANSI,不是ASCII。ANSI表示线程的字符编码,可以来自程序、用户或操作系统。这不太可能是ASCII码。@TomBlodget-我更新了答案以显示两者。看一看。
if (strcmp(pEntry.szExeFile, filename) == 0)
void killProcessByName(TCHAR *filename)
/* ... */
if (_tcscmp(pEntry.szExeFile, filename) == 0) /* replaced strcmp */
/* ... */
#include <windows.h> /* needed in order to use TEXT() macro */
/* ... */
TCHAR *proccc = TEXT("firefox.exe"); /* TEXT() is a <windows.h> macro */