1.记录相关代码
char *wtoc(wchar_t *wText)
{
DWORD dwNum = WideCharToMultiByte(CP_ACP, NULL, wText, -1,NULL, 0, NULL, FALSE);//把第五个参数设成NULL的到宽字符串的长度包括结尾符
char *psText = NULL;
psText = new char[dwNum];
if(!psText)
{
delete []psText;
psText = NULL;
}
WideCharToMultiByte (CP_ACP, NULL, wText, -1,psText, dwNum, NULL, FALSE);
return psText;
}
std::string GetExecutablePath(void)
{
WCHAR path[MAX_PATH+1];
GetModuleFileName(NULL,path,MAX_PATH);
char *temp = wtoc(path);
char* p = strrchr(temp,'\\');
*p = NULL;
std::string str = temp;
return str;
}
2.CString转化成char* (2)—— 使用 CString 对象的 GetBuffer 方法
如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,你完全可以这样做:
CString s(_T("File.ext"));
LPTSTR p = s.GetBuffer();
LPTSTR dot = strchr(p, ''.''); // OK, should have used s.Find...
if(p != NULL)
*p = _T(''\0'');
s.ReleaseBuffer();
CString s("GrayCat");
LPCTSTR p = s;
它可以正确地运行。这是由C语言的强制类型转化规则实现的。当需要强制类型转化时,C++规测容许这种选择。比如,你可以将(浮点数)定义为将某个复数 (有一对浮点数)进行强制类型转换后只返回该复数的第一个浮点数(也就是其实部)。可以象下面这样:
Complex c(1.2f, 4.8f);
float realpart = c;
char* szName = GetName().GetBuffer(20);
RegSetValueEx(hKey, "Name", 0, REG_SZ,
(CONST BYTE *) szName,
strlen (szName + 1));
3.VS中配置
头文件路径:../../../data/data\PtcDataMng ../../../map/SEngine/SEngine
lib库路径:../../../../../build_msvc/lib/Win32/Debug ../../../map/SEngine/SEngine/lib/win32_ ../../../../build_msvc/Debug 或者$(SolutionDir)\lib\$(PlatformName)\$(ConfigurationName)
依赖库:OSGEngine.lib MapAPId.lib cppsqlite3.lib
中间输出目录:$(ConfigurationName) 或者 $(SolutionDir)\obj\$(PlatformName)\$(ConfigurationName)\$(ProjectName)