|
who r u,r u facing the same problem,
sree
|
|
|
|
|
i tried it not working
please help me,
urgent please.
sree.
|
|
|
|
|
|
I cann't understand this point........"bitmap with scrollbars in the dialog "
Please explain this so that whether i can help u
yours faithfully
ajeesh
|
|
|
|
|
Hi all..
I've been stuck for a long time in this problem. It seems very easy to convert CString to a const char * or char * in VC++, but it really does not work for embedded VC++. My code is simply trying to open a file, using fopen with file path taken from CFileDialog GetPathName().
<br />
CFileDialog dlg (TRUE, _T("maf"), NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_EXPLORER, szFilters);<br />
if (IDOK == dlg.DoModal()) {<br />
CString __filepath = dlg.GetPathName();<br />
file = fopen(__filepath, "rb");<br />
}<br />
I've tried to read each single character from CString (by iteratively using GetAt() function) as follows
<br />
CString __filepath;<br />
__filepath = dlg.GetPathName();<br />
int x = __filepath.GetLength();<br />
char *filename;<br />
filename = new char [x];<br />
for (int i=0;i<x;i++) {<br />
filename[i] = (char)__filepath.GetAt(i);<br />
}<br />
But it does not work for UNICODE text.
Help me..
Houari
|
|
|
|
|
Maybe you should use Unicode character type (wchar_t ) instead of char ?
const wchar_t * filename = __filepath;
Or do you need a conversion from Unicode to ANSI?
|
|
|
|
|
Thank you for your suggest, Viorel. But when I compile the code, this error still occurs:
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'const unsigned short *' to 'const char *'<br />
I also tried using TCHAR as Milton suggest, the error becomes
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'unsigned short *' to 'const char *'<br />
Houari
|
|
|
|
|
From the first error messages it seems that your application is actually non-Unicode. See the project properties in order to check this (General --> Character Set). The solution with TCHAR should work in both cases, so the second error message is strange.
-- modified at 9:24 Tuesday 20th June, 2006
Actually in order to work in both cases, you should use _tfopen instead of fopen and _wfopen . Instead of char or wchar_t , use TCHAR . Define literal strings with _T("...") macro.
|
|
|
|
|
CString __filepath;<br />
__filepath = dlg.GetPathName();<br />
int x = __filepath.GetLength();<br />
char *filename;<br />
filename = new char [x];<br />
for (int i=0;i<x;i++) {<br />
filename[i] = (char)__filepath.GetAt(i);<br />
}
try the above code by replacing all char with TCHAR
ie char *filename; would be TCHAR *filename;<br />
filename = new char [x]; would be filename = new TCHAR [x]; and <br />
filename[i] = (char)__filepath.GetAt(i); would be filename[i] = (TCHAR)__filepath.GetAt(i);
cheers...MIlton KB
|
|
|
|
|
I fu running in UNICODE, the CString converts all data assigned to it to UNICODE.
use 'W2A' macro to convert UNICODE to ASCII..
i hope that helps u out!
;o)
|
|
|
|
|
why u want to use char*. If u use TCHAR*..the problem will be solved..
houari_id wrote: CString __filepath;
__filepath = dlg.GetPathName();
int x = __filepath.GetLength();
char *filename;
filename = new char [x];
for (int i=0;i<x;i++) {
filename[i]="(char)__filepath.GetAt(i);
}</blockquote">
This is not a good way.. Use _tcscpy instead
nave
|
|
|
|
|
I've tried this way:
<br />
char *filename;<br />
filename = new char [x];<br />
_tcscpy(filename, __filepath);<br />
And when I compile the code, this error occurs:
<br />
error C2664: 'wcscpy' : cannot convert parameter 1 from 'char *' to 'unsigned short *'<br />
Houari
|
|
|
|
|
u try this way
TCHAR *filename;
filename = new TCHAR[x];
_tcscpy(filename, __filepath);
nave
|
|
|
|
|
houari_id wrote: char *filename;
filename = new char [x];
With Unicode, use wchar_t instead.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
No, both data type TCHAR and wchar_t are not working, this error still there for both:
<br />
cannot convert parameter 1 from 'unsigned short *' to 'const char *'<br />
Or is it something wrong with my embedded VC++ ?
Houari
|
|
|
|
|
Are you still trying to use fopen() ? If so, you are erroneously mixing MBCS and Unicode.
char szFile[MAX_PATH];
fopen(szFile, "r");
wchar_t szFile[MAX_PATH];
_wfopen(szFile, "r");
TCHAR szFile[MAX_PATH];
_tfopen(szFile, "r");
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
houari_id wrote: file = fopen(__filepath, "rb");
What is the value of __filepath at this point? When fopen() fails, what is the value of errno ?
houari_id wrote: file = fopen(__filepath, "rb"); .
If you are using Unicode, use _wfopen() instead.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
This error occurs during the compiling the code:
<br />
error C2664: 'fopen' : cannot convert parameter 1 from 'class CString' to 'const char *'<br />
Actually, it is fine in VC++ isn't it? In MFC, I just put file = fopen (dlg.GetPathName(), "rb"); and it's work fine. But in eVC++, this seems not OK.
Houari
|
|
|
|
|
try,
file = fopen ((TCHAR*)dlg.GetPathName().GetBuffer(), "rb");
cheers.. mIlton KB
|
|
|
|
|
Actually in order to work in both cases, you should use _tfopen instead of fopen and _wfopen :
file = _tfopen(dlg.GetPathName(), _T("rb"));
|
|
|
|
|
Waaa!! It works!!
Thank you very much Viorel... and the others too... thank you...
Houari
|
|
|
|
|
Milton KB wrote: file = fopen ((TCHAR*)dlg.GetPathName().GetBuffer(), "rb");
There is no need to call GetBuffer() as the object is not being modified.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
|
I want to use COM components in my application.
When to use
#import
and when to use CoInitialize, CoCreateInstance(..)
Are both reaching to same destination?
Or #import has to be used with ATL executable
and CoInitialize, CoCreateInstance has to be used with InProcess Dlls
Please confirm?
Row
|
|
|
|
|
Any thread that uses COM will have to call CoInitialize or CoInitializeEx to initialize COM on that thread and tell the COM runtime which apartment the thread belongs to. CoCreateInstance is the most common API for object creation. #import is used to get the compiler to generate C++ wrapper classes for COM interfaces from type libraries.
Steve
|
|
|
|