一、BSTR、LPSTR和LPWSTR 在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。 LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。 LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位 ANSI 字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。 LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。 LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
char buffer_1[] = "C://TEST//file.txt"; char *lpStr1; lpStr1 = buffer_1; // Invalid file path name char buffer_2[] = "C://TEST//file.doc"; char *lpStr2; lpStr2 = buffer_2; // Search for the presence int retval = PathFileExists(lpStr1); if(retval == 1) { cout << "Search for the file path of : " << lpStr1 << endl; cout << "The file requested /"" << lpStr1 << "/" is a valid file" << endl; cout << retval = PathFileExists(lpStr2); if(retval == 1) { cout << "/nThe file requested " << lpStr2 << "
#include <windows.h> #include <stdio.h> #include <iostream> DWORD CreateChildProcess(LPSTR szChildProcessCmd ); int main() { CreateChildProcess("Child.exe"); } DWORD CreateChildProcess(LPSTR szChildProcessCmd &si,sizeof(si)); si.cb = sizeof(si);//设置启动信息结构的大小 //将被创建进程的信息结构清零 ZeroMemory(&pi,sizeof(pi)); //LPSTR 指向启动进程的EXE文件 //LPSTR 启动进程的命令行 //LPSECURITY_ATTRIBUTE 进程的安全属性 //LPSECURITY_ATTRIBUTE 进程句柄是否可被子进程继承
Psapi.lib") /* 函数声明 */ // 使用__declspec(dllexport)声明导出函数 __declspec(dllexport) DWORD ExportExample(LPSTR szMsg, DWORD dwCode) * 功能 导出函数,显示消息 * * 参数 LPSTR szMsg 字符串; DWORD dwCode 整形 *************** ***********************/ DWORD ExportExample(LPSTR szMsg, DWORD dwCode) { LPVOID lpShowOut = HeapAlloc (GetProcessHeap(), , lstrlen(szMsg) + ); wsprintf((LPSTR)lpShowOut, "%s,%d", szMsg, dwCode); MessageBox(NULL, (LPSTR)lpShowOut, "由导出函数弹出的消息!"
include <windows.h> #include <stdio.h> int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { LPSTR szString = "Windows data type string"; CHAR lpString[120]; DWORD 0xFFFFFFFF; DWORD dwOne = 0x1; INT iMax = 0xFFFFFFFF; INT iOne = 0x1; MessageBox(NULL,szString,"LPSTR if(iMax<iOne) { MessageBox(NULL,"INT数据类型0xFFFFFFFF小于0x1","INT",MB_OK); } } DWORD是32位无符号整形数据 LPSTR
楼主举的例子 LPSTR lpstr = (LPSTR)(LPCTSTR)string; 就是这种不安全的使用方法。 其实在很多地方都可以看到类似 LPSTR lpstr = (LPSTR)(LPCTSTR)string; 地用法,这种情况一般是函数的约束定义不够完善的原因, 比如一个函数接受一个字符串参数的输入
在此文件中输入以下代码 #include <windows.h> int WinMain( HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR windows.h> 引入windows.h文件,此文件中定义了MessageBox函数 int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR 操作系统执行一个程序的时候,从这里进入程序 HINSTANCE hInstance 应用程序本次运行的实例句柄 HINSTANCE hPreInstance 应用程序之前运行的实例句柄,此处一般为NULL LPSTR
include <stdio.h> #include <windows.h> #include <iostream> using namespace std; int CheckReg() { LPSTR <<endl; return 0; } } int StartExe(LPSTR path) { STARTUPINFO stinfo;//当创建新进程时,将使用该结构的有关成员 return 1; } } int StartCheck() { LPSTR sNetfile = "C:\\Program Files\\NetMeeting\\conf.exe "; //你的.net安装包的路径 LPSTR sExefile = "C:\\Program Files\\Google\\Google Pinyin 2\\GooglePinyinSettingWizard.exe
include "tchar.h" int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ), TEXT( "haha" ), MB_OK); return 0; } 当采用WinMain作为入口函数时,第三个参数类型应定义为LPSTR,表示CHAR *型 否则出现“WinMain
systime); 参考附录 { CString strCString=”ABC”; char strchar[256],*pstr; pstr=(LPSTR )(LPCTSTR)strCString; //CString—->char* strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString—- strbstr=strWCHAR; pstr=strbstr; //UNICODE—->char* strCString=”10″; int istr=atoi((LPSTR
) HANDLE:对象的句柄,最基本的句柄类型 HICON:图标的句柄 HINSTANCE:程序实例的句柄 HKEY:注册表键的句柄 HMODULE:模块的句柄 HWND:窗口的句柄 LPSTR:字符指针 ,也就是字符串变量 LPSTR是MFC特有的数据类型,具体要根据编译环境的上下文来区别。 类似的还有LPCTSTR等同于const char * LPCSTR:字符串常量 LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。 LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的64位双字节字符数组指针。CString与LPSTR转换。
msg_type) { case LPC_CONNECTION_REQUEST : printf( "recv Msg: %s \n" , ( LPSTR lstrcpyA(( LPSTR )RecvPortMsg.Data, "reply" ); // 获得连接请求. )m_ClientView.ViewBase); lstrcpyA(( LPSTR )m_ClientView.ViewBase, "mapview" ); , MAX_DATA_LEN - 1); #ifdef TEST_VIEW //m_ClientView.Length = sizeof("send"); lstrcpyA(( LPSTR else { printf( "ZwRequestWaitReplyPort ok\n" ); printf( "recv Msg: %s \n" , ( LPSTR
读文件 #include <windows.h> #include <stdio.h> #include <iostream> DWORD MyReadFile(LPSTR filePath) { ; return 0; } 写文件 #include <windows.h> #include <stdio.h> #include <iostream> DWORD MyWriteFile(LPSTR
include <windows.h> #include <stdlib.h> #include <stdio.h> #include <cstring> #define BUFSIZE 1024 LPSTR GetDirverInfo(LPSTR szDrive) { UINT uDriveType; uDriveType = GetDriveType(szDrive); switch(uDriveType
BOOL CreateProcessA( LPCSTR lpApplicationName, //要创建的进程名称 完整路径+exe LPSTR typedef struct _STARTUPINFOA { DWORD cb; 表示当前结构体的大小 重要成员 LPSTR lpReserved; LPSTR lpDesktop; LPSTR lpTitle; DWORD dwX; 创建进程的
hMySharedMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF), NULL,PAGE_READWRITE,0,0x1000,”MySharedMem”); 并映射缓存区视图: LPSTR pszMySharedMapView=(LPSTR)MapViewOfFile(hMySharedMapFile, FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); 其他进程访问共享对象
HINSTANCE hInstance, //本模块的实例句柄 HINSTANCE hPrevInstance, //Win16留下的废物 LPSTR wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);//使用白色背景画刷 wndclass.lpszMenuName = (LPSTR
SHGetPathFromIDList来真正获取用户选择的文件路径,该函数的原型如下: WINSHELLAPI BOOL WINAPI SHGetPathFromIDList( LPCITEMIDLIST pidl, LPSTR pragma comment(lib, "comctl32.lib") int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
; charrayp[5] = '\0'; charrayp[6] = 'F'; charrayp[7] = 'G'; charrayp[8] = 'H'; LPSTR size_type lstringlength = strBreakString.length(); ATL::CStringA CStringAobj = ""; LPSTR 转std::string的正确方法 { int nstrBreakCStringALength = strBreakCStringA.GetLength(); LPSTR size_type lstringlength = strBreakString.length(); ATL::CStringA CStringAobj = ""; LPSTR
于是我们的程序入口点是 PIMAGE_DOS_HEADER lpstDosHeader = (PIMAGE_DOS_HEADER)(LPSTR)lpMapFile; PIMAGE_NT_HEADERS lpstNtHeaders = (PIMAGE_NT_HEADERS)((LPSTR)lpMapFile + lpstDosHeader->e_lfanew ); dwPEEntry = lpstNtHeaders dwCallAddrOffset, 4, NULL ) ) { break; } // 计算call的目标函数地址 LPSTR