|
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
|
|
|
|
|
CoInitialize() Initializes the COM library on the current thread and identifies the concurrency model as single-thread apartment (STA). Applications must initialize the COM library before they can call COM library functions other than CoGetMalloc and memory allocation functions. (This is from the docs)
Now you can instantiate your component using CoCreateInstance()
You can also invoke the methods of the Component using LoadLibrary() etc
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
-- modified at 8:33 Tuesday 20th June, 2006
|
|
|
|
|
_AnShUmAn_ wrote: You can also invoke the methods of the Component using LoadLibrary() etc
This is not the case.
Steve
|
|
|
|
|
As everybody mentioned you have to call CoInitialize to load/map the COM subsystem into your process memory. This is vital.
Then to use/invoke calls on the Component classes:
Either you can use #import approach or the CoCreateInstance approach.
As a beginner I would recommend you to go for #import as this is comparatively easy. It wraps most of the COM complexities under Smart pointers.
Also this is not the place for posting COM related questions. Going forward please do it in the COM section
cheers...milton Kb
|
|
|
|
|
Hi Milton
Glad to meet u in CP
Where u know?
I am Anilkumar , Ex MOPL
|
|
|
|
|
Hey glad 2 hear from u. I was in seattle,WA. Juz back at Blr last friday. Come 2 milton.kbaby@cognizant.com / miltonkb@msn.com
rgds...milton kb.
|
|
|
|
|
|