|
Patrick Tang wrote: ...but tell me is error.
Are you keeping this error a secret or can you be bothered to share it with us?"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
|
|
|
|
|
I can't believe I'm struggling as much as I am over this, but basically, I have
signed char cCoffee[16];
and I need to turn it into CString.
I've tried all the obvious:
CString strString 1 = cCoffee;
CString strString2(cCoffee);
CString strString3;
CopyMemory(strString3.GetBuffer(), cCoffee, sizeof(unsigned char)*16);
strString3.ReleaseBuffer();
I still can't get it to work...
I don't have a say in how cCoffee is declared, so please don't suggest things like "use _T("string")".
I'm using Unicode.
Any help greatly appreciated.
|
|
|
|
|
PaulowniaK wrote: I still can't get it to work...
Please describe it concretely Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
Apologies.
My VS2005 doesn't speak English, so I'll just list the compiler error for each attempt I made:
CString strString1 = cCoffee;
results in error C2440
CString strString2(cCoffee);
results in error C2664
CString strString3;
CopyMemory(strString3.GetBuffer(), cCoffee, sizeof(signed char)*16);
strString3.ReleaseBuffer();
compiles OK but has a runtime error
"Expression: nLength <= GetData()->nAllocLength" etc
|
|
|
|
|
What error does come if you write:
CString cszTest((char*) cCoffee);
please ? Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
Ooops, I seemed to have missed this message.
No error, actually!
I hope it is fully solved, but I need to check something else...
|
|
|
|
|
Yes, you can use the CString to convert any char* directly Check your definition of Irrationality[ ^]
1 - Avicenna
5 - Hubbard
3 - Own definition
|
|
|
|
|
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 !
|
|
|
|