|
Cool, but I found the reverse problem as well.
I'm loading up cCoffee from a CString as well and messed that up so only the first character was copied:
CopyMemory(cCoffee, strOriginal.GetBuffer(), strOriginal.GetLength());
I understand this is wrong, but I don't know how to fix it.
Please help!
(Basically, I'm going from CString -> signed char* -> CString. Probably not a nice thing to do, but I'm stuck with it for the time being...)
|
|
|
|
|
You could use the macro T2A to "go back" Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
I get error C2065 if I do
CString strOriginal;
cCoffee = T2A(strOriginal);
|
|
|
|
|
#include <AtlConv.h>
{
...
USES_CONVERSION;
char* pchTempResult = T2A(cszYourString);
strncpy(cCoffee, pchTempResult, _countof(cCoffee));
...
} Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
Thanks.
Nearly, but not quite, I still have error C2664.
The problem seems to be strncpy .
It complains about not being able to turn signed char* into char* .
But I used CopyMemory instead and it worked!!
Thanks a million!!
|
|
|
|
|
try
CopyMemory(strString3.GetBuffer(16/*needed*/+1/*sanitiy*/), cCoffee, sizeof(signed char)*16);Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
The problem is exactly that.
signed char is not UNICODE but CString is.
You can either change cCoffee to signed wchar_t which will make it UNICODE .
Or you can use CStringA which will then not use UNICODE .
Or you can convert cCoffee to a UNICODE string using MultiByteToWideChar .
|
|
|
|
|
#ifdef UNICODE
char* pchTest("test");
CString cszTest(pchTest);
ASSERT(cszTest == _T("test"));
#endif
You will not see any popup window hier Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
Thanks.
I have no choice over how cCoffee is declared, and I have to use CString not CStringA, so I tried the MultiByteToWideChar option, but I still get error C2664.
|
|
|
|
|
Please post the relevant code.
|
|
|
|
|
MultiByteToWideChar(CP_UTF8, 0, cCoffee, -1, &strString1, 0);
|
|
|
|
|
strStrings1 has to be of type wchar_t and the last parameter has to be specified.
wchar_t strString1[MAX_PATH];
MultiByteToWideChar(CP_UTF8, 0, cCoffee, -1, strString1, MAX_PATH);
|
|
|
|
|
Ah, I see, thanks for the help.
|
|
|
|
|
|
Thanks.
Iain Clarke, Warrior Programmer wrote: Big hint, which you've already had: later versions of VS default to unicode, so CString uses that.
I just assumed my VS uses Unicode because it speaks Japanese.
Never mind, at least I'll know where to look the next time I get stuck on strings.
|
|
|
|
|
Hi,
I would like to call my home page from VC++ (thru default browser).For example, user clicks on a button, so internet explorer will be open to show some web pages.
Can anybody help me ?
|
|
|
|
|
You can use the ShellExecute[^] function to open a page in the browser. txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
you can reference this code :
int OpenGG()
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
BOOL bRet;
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
ZeroMemory(&si,sizeof(STARTUPINFO));
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMAXIMIZED;
si.cbReserved2 = NULL;
si.lpReserved2 = NULL;
CString strUrl = "C:\\Program Files\\Internet Explorer\\IEXPLORE.exe http://www.google.cn";
bRet = CreateProcess(NULL,(LPTSTR)(LPCTSTR)strUrl,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
return bRet;
}
there leave a blank space between the "IEXPLORE.exe" and "http://...".
Good Luck !
|
|
|
|
|
This opens IE, which may not be the default browser. You should use ShellExecute() instead."One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
|
In addition to other's criticisms this assumes that that the browser is installed at a specific location. There's no guarantee this is true, in fact it is not even unusual. This is bad code. Steve
|
|
|
|
|
Hello,
thankyou, but I dont know what type of browser are installed on user system.
I would like to write a function only with one argument such as this:
CallMayHomePage("www.myhomepage.com")
Best Regards
Behzad Saffarian
|
|
|
|
|
ShellExecute() has been suggested to you twice. Have you tried it? "One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
other way,you can see:
int OpenUrl(CString strUrl)
{
CString strCmdLine = "explorer.exe " + strUrl;
LPTSTR lpCmd = (LPTSTR)(LPCTSTR)strCmdLine;
STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = 1;
BOOL bRet = CreateProcess(NULL,
lpCmd,
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);
if(bRet)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return bRet;
}
void CUrlDlg::OnBtnTest()
{
OpenUrl("http://www.baidu.com");
}
but I propose that you must adopted DavidCrow' plan..
|
|
|
|
|
This is a bizarre approach. A better way is shown here[^]. In short:
LONG r = ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL); Steve
|
|
|
|