LPCSTR是个什么东西,VC偶怎么学不明白?

时间:2021-10-07 10:43:53
看到:
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)ProcMain, 0);
  
偶把它改成:
  LPCSTR lpTemplateName1 = MAKEINTRESOURCE(IDD_DIALOG);
  DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
调试查看:lpTemplateName1 的值,发现什么也没有,显示地址0x00000065。。。。。

问题:LPCSTR是个什么东西?是字符串指针吗?为什么没有值?我的程序能够生成窗口的。。。。。

请高手说一说

26 个解决方案

#1


typedef char CHAR ;
typedef wchar_t WCHAR ;

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

typedef WCHAR *PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, *PCWSTR ;

#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

#2


typedef char CHAR ;
typedef wchar_t WCHAR ;

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

typedef WCHAR *PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, *PCWSTR ;

#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

=================================
一個宏。

#3


LPCSTR是指针,const char * ,使用上,不要更改这个指针指向的字符串内容,属常量字符串。

#4


一个32位的指针,指向一个常数字符串

#5


http://blog.csdn.net/baodi_z/archive/2004/12/24/228045.aspx

#6


=================================
一個宏。
==================================
知道是一个宏
显示地址0x00000065。。。。。
问题是为什么没有值?

DialogBoxParam不是要靠它来生成窗口的吗?
代码是http://www.vckbase.com/document/viewdoc/?id=1343的源程序,大家帮看看

#7


LPCSTR是指针,const char * ,使用上,不要更改这个指针指向的字符串内容,属常量字符串。
==========================================问题是为什么没有值?
DialogBoxParam不是要靠它来生成窗口的吗?

#8


long pointer const string

#9


指向一个字符串的指针, 该字符串应该是const的, 

#10


安装一个visual assist x,帮助你学习

#11


在这里,仅仅起到类型转换的作用,并不是指向字符串。因为DialogBoxParam的参数类型决定的。

#12


在对话框还没有出来的时候,它肯定没值.楼上的说的没错,LPCSTR是指针,const char *.但在这里是标明对话框类型的标识符

#13


MAKEINTRESOURCE是把数值强制转换成LPCSTR,因为DialogBoxParam的参数类型需要LPCSTR,MAKEINTRESOURCE转换成的LPCSTR其高4位为0,DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.

#14


手误打错了,高4位为0应该是高位的WORD值,即高位两个BYTE

#15


DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.
==========================================
没有源码,只能看disassemble了,难道是这下面几个指令?

77D288ED   push        dword ptr [ebp+0Ch]
77D288F0   or          ebx,0FFh

7C80C77C   cmp         eax,10000h
7C80C781   jae         7C82253C

#16


DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.
==========================================
如果我想让DialogBoxParam调用的时候不是传这种MAKEINTRESOURCE(IDD_DIALOG);的类型进去,而是传一个指向实际字符串的指针进去可以么?--既然有两种可能,应该是可以的吧?
具体应该怎么写?请给个例子,谢谢!

#17


L --- 长
P --- 指针
C --- 只读
T --- 用于过渡UNICODE的智能宏的代名次,有一系列T宏
S \
T  >- 字符串
R /

综上,LPCTSTR是一个指向一段只读的字符串的(长)指针,当系统定义了UNICODE宏时,它相当于“LPCSTR”,否则相当于“LPCWSTR”,其中“W”是宽(Wide)字符的意思。

#18


LPCSTR是字符型的指针,应该是32位的

#19


mark

#20


情形1
LPCSTR lpTemplateName1 = MAKEINTRESOURCE(IDD_DIALOG);
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);

情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);

#21


LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier

#22


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);LPCSTR 
==============================================================================
_T是不是转宽字符,偶直接这样写lpTemplateName1 ="IDD_DIALOG";
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);LPCSTR 
出不来窗口

#23


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier
========================================================================
加了一个头文件#include "tchar.h",编译通过
不过,窗口没有生成。。。。那么情形2是否不是这样调用的?还是要加什么?

#24


字符串

#25


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier
========================================================================
加了一个头文件#include "tchar.h",编译通过
不过,窗口没有生成。。。。那么情形2是否不是这样调用的?还是要加什么?
========================================================================
资源编辑的时候不能给对话框资源指定值,不过我好象没能找到在哪操作,可以直接修改资源文件,把IDD_DIALOG DIALOG 改成“IDD_DIALOG” DIALOG,然后就可以了。

#26


可以直接修改资源文件,把IDD_DIALOG DIALOG 改成“IDD_DIALOG” DIALOG,然后就可以了。
===================================================================================
有如下两个地方,偶都改了,但是还是不行啊,窗口出不来。。。。请问是这两个地方吗?

"IDD_DIALOG" DIALOG DISCARDABLE  0, 0, 187, 75

BEGIN
    "IDD_DIALOG", DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 68
    END
END

#1


typedef char CHAR ;
typedef wchar_t WCHAR ;

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

typedef WCHAR *PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, *PCWSTR ;

#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

#2


typedef char CHAR ;
typedef wchar_t WCHAR ;

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

typedef WCHAR *PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, *PCWSTR ;

#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

=================================
一個宏。

#3


LPCSTR是指针,const char * ,使用上,不要更改这个指针指向的字符串内容,属常量字符串。

#4


一个32位的指针,指向一个常数字符串

#5


http://blog.csdn.net/baodi_z/archive/2004/12/24/228045.aspx

#6


=================================
一個宏。
==================================
知道是一个宏
显示地址0x00000065。。。。。
问题是为什么没有值?

DialogBoxParam不是要靠它来生成窗口的吗?
代码是http://www.vckbase.com/document/viewdoc/?id=1343的源程序,大家帮看看

#7


LPCSTR是指针,const char * ,使用上,不要更改这个指针指向的字符串内容,属常量字符串。
==========================================问题是为什么没有值?
DialogBoxParam不是要靠它来生成窗口的吗?

#8


long pointer const string

#9


指向一个字符串的指针, 该字符串应该是const的, 

#10


安装一个visual assist x,帮助你学习

#11


在这里,仅仅起到类型转换的作用,并不是指向字符串。因为DialogBoxParam的参数类型决定的。

#12


在对话框还没有出来的时候,它肯定没值.楼上的说的没错,LPCSTR是指针,const char *.但在这里是标明对话框类型的标识符

#13


MAKEINTRESOURCE是把数值强制转换成LPCSTR,因为DialogBoxParam的参数类型需要LPCSTR,MAKEINTRESOURCE转换成的LPCSTR其高4位为0,DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.

#14


手误打错了,高4位为0应该是高位的WORD值,即高位两个BYTE

#15


DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.
==========================================
没有源码,只能看disassemble了,难道是这下面几个指令?

77D288ED   push        dword ptr [ebp+0Ch]
77D288F0   or          ebx,0FFh

7C80C77C   cmp         eax,10000h
7C80C781   jae         7C82253C

#16


DialogBoxParam根据这个特征来区分这个参数是指向实际的字符串还是仅仅是对话框类型的标识符.
==========================================
如果我想让DialogBoxParam调用的时候不是传这种MAKEINTRESOURCE(IDD_DIALOG);的类型进去,而是传一个指向实际字符串的指针进去可以么?--既然有两种可能,应该是可以的吧?
具体应该怎么写?请给个例子,谢谢!

#17


L --- 长
P --- 指针
C --- 只读
T --- 用于过渡UNICODE的智能宏的代名次,有一系列T宏
S \
T  >- 字符串
R /

综上,LPCTSTR是一个指向一段只读的字符串的(长)指针,当系统定义了UNICODE宏时,它相当于“LPCSTR”,否则相当于“LPCWSTR”,其中“W”是宽(Wide)字符的意思。

#18


LPCSTR是字符型的指针,应该是32位的

#19


mark

#20


情形1
LPCSTR lpTemplateName1 = MAKEINTRESOURCE(IDD_DIALOG);
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);

情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);

#21


LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier

#22


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);LPCSTR 
==============================================================================
_T是不是转宽字符,偶直接这样写lpTemplateName1 ="IDD_DIALOG";
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);LPCSTR 
出不来窗口

#23


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier
========================================================================
加了一个头文件#include "tchar.h",编译通过
不过,窗口没有生成。。。。那么情形2是否不是这样调用的?还是要加什么?

#24


字符串

#25


情形2
LPCSTR lpTemplateName1 = _T("IDD_DIALOG"); //资源标识符是字符串
DialogBoxParam(hInstance, lpTemplateName1, NULL, (DLGPROC)ProcMain, 0);
====================================
SubClass.cpp(99) : error C2065: '_T' : undeclared identifier
========================================================================
加了一个头文件#include "tchar.h",编译通过
不过,窗口没有生成。。。。那么情形2是否不是这样调用的?还是要加什么?
========================================================================
资源编辑的时候不能给对话框资源指定值,不过我好象没能找到在哪操作,可以直接修改资源文件,把IDD_DIALOG DIALOG 改成“IDD_DIALOG” DIALOG,然后就可以了。

#26


可以直接修改资源文件,把IDD_DIALOG DIALOG 改成“IDD_DIALOG” DIALOG,然后就可以了。
===================================================================================
有如下两个地方,偶都改了,但是还是不行啊,窗口出不来。。。。请问是这两个地方吗?

"IDD_DIALOG" DIALOG DISCARDABLE  0, 0, 187, 75

BEGIN
    "IDD_DIALOG", DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 180
        TOPMARGIN, 7
        BOTTOMMARGIN, 68
    END
END