|
Hi super_ttd,
What's the problem with CString::GetBuffer()? Why dont you like it?
|
|
|
|
|
GetBuffer() is completely unnecessary when you're only reading the string
(i.e. when you only need a const pointer to the string's internal buffer).
The LPCSTR operator is safe and more efficient. GetBuffer() is for when
you need a non-const pointer.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Same ocean, different fish, same bait.
You have lunch yet?
led mike
|
|
|
|
|
led mike wrote: You have lunch yet?
Heh. I'm going to HAVE to now
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
But it appears that VC2005 doesn't support (LPSTR) or (LPCTSTR) operator.
isn't it?
Regards
|
|
|
|
|
Yes, it is simply because UNICODE is defined by default (which was not the case with VC6). I strongly suggest that you read the article given by Led Mike, things will be much more clear afterwards.
|
|
|
|
|
The operator is a member of the CSimpleStringT class, which is the base
class of CStringT.
The actual operator is PCXSTR (the ATL type), which is the equivalent of LPCTSTR
(a Win32 type).
Here's your code using generic text types:
TCHAR buffer[MAX_PATH];
GetModuleFileName(NULL,buffer,MAX_PATH);
CString path = buffer;
path = path.Left(path.ReverseFind(_T('\\'))+1);
path += _T("result.mp3");
f = _tfopen( path , _T("wb")); <code>
See Generic-Text Mappings in Tchar.h[^]
and for Unicode info: International Programming[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Read the documentation about CString::GetBuffer and you will see why you have to absolutely avoids it if you don't know exactly what you are doing.
|
|
|
|
|
Visual C++ 2005 doesn't support (LPCTSTR) cast operator.
thus I need an interface to change a CString object to a char*
exactly now I am porting an project from VC6 to VC2005 and it is my problem
Regards
Mahdi
|
|
|
|
|
There a various ways:
1)
CString str = "filename";
char charPtr[100];
sprintf(charPtr, "%s", str);
2)
CString str = "filename";
char* charPtr = str.GetBuffer(str.GetLength());
|
|
|
|
|
zafersavas wrote: str.GetBuffer(str.GetLength());
Memory Leak here !
Why the hell do people use that dangerous GetBuffer() function when it's absolutely useless ?
|
|
|
|
|
Gut Mikh Tappe wrote: Please let me know what to do
Ok I will try. What you need to do is read the documentation.[^]
Also reading this might help as well.[^]
In my experience not all authors match every reader. So if you find reading those sources don't supply your need 100% keep looking for more. The bottom line is what you need to do is read and study rather than type code and forum messages.
led mike
|
|
|
|
|
led mike wrote: Also reading this might help as well.[^]
I think that is the best choice to start with
|
|
|
|
|
led mike wrote: Also reading this might help as well.[^]
That IS a good link. I bookmarked that to post in the future,
Thanks!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
In addition to super_ttd's reply...
If you must use fopen(), then you should probably use a CStringA.
CString has a generic internal character type, depending on whether
UNICODE or _UNICODE is defined.
If you want to use the generic text CString, then it will pair nicely
with the generic text version of fopen(), which is _tfopen().
Gut Mikh Tappe wrote: char buffer[MAX_PATH];
GetModuleFileName(NULL,(LPWCH)buffer,MAX_PATH);
Bad cast!! GetModuleFileName takes a LPTSTR as its second parameter.
Your buffer, therefore, should be a TCHAR type, not char.
Mind your types.....if you need a cast to get something to compile, look at WHY.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
May you please give me an article about UNICODE ?
Regards
Mahdi
|
|
|
|
|
|
Hello all together!
In my current project i am trying to add a scrollbar to a CStatic control. This CStatic control is placed dynamicaly on a CWnd using Create(...). The scrollbar is provided with the CScrollHelper class and the scrollbars are already visible. My problem is that the scrollbars can not be used...i think the events are not passed to the CStatic...
Has anyone an idea how to do it?
|
|
|
|
|
MrNyquist wrote: Hello all together!
Hello singularly!
MrNyquist wrote: Has anyone an idea how to do it?
Looks like this guy might.[^] Notice there is a forum at the bottom of the article for asking questions about using CScrollHelper
led mike
|
|
|
|
|
ok, i know this article and the forum at the bottom ...
but i did not find an approach for my problem. (scrolbars are not accessible on a static control)
|
|
|
|
|
|
I've implemented a custum control deriving a class from CStatic
and performing a custom drawing.
This controls works fine when I put it in a Dialog (calling
Mycontrol.Invalidate() - in MyDialog class - causes control redrawing).
If I put the same control in a DialogBar calling
Mycontrol.Invalidate() doesn't causes control redrawing, I've to
call MyDialog.Invalidate(): in this way the whole DialogBar
is redrawn and Mycontrol is redrawn within it.
Whats is this different behaviour due to ?
Thanks
|
|
|
|
|
Hi, please try calling UpdateWindow after Invalidate. It should work in both cases.
Best regards,
Mihai Moga
|
|
|
|
|
Hi All
How can i set background image on dailob box and button in vc++ 2005?Plz help me
|
|
|
|