air560002000 Δημοσ. 19 Δεκεμβρίου 2007 Δημοσ. 19 Δεκεμβρίου 2007 Tο παρακατω ειναι σε c++ για windows kai το visual c++ μου βγαζει λαθη. σαν προγραμμα ειναι σωστο γιατι το εχω τρεξει σ αλλο μηχανημα.τι μπορει να φταιει; #include<windows.h> #include<stdio.h> int main(void) { STARTUPINFO si; PROCESS_INFORMATION pi; DWORD dwError; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); if (!CreateProcess(NULL,"calc.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){ dwError=GetLastError(); fprintf(stderr,"Error %ld in process creation.\n",(long)dwError); return 1;} WaitForSingleObject(pi.hProcess,INFINITE); return 0; } error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'const char [9]' to 'LPWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Directx Δημοσ. 19 Δεκεμβρίου 2007 Δημοσ. 19 Δεκεμβρίου 2007 Αν και δεν χρησιμοποιώ το Visual Studio, το λάθος που λαμβάνεις προέρχεται από το ότι, ο compiler σου χρησιμοποιεί την Unicode έκδοση της ρουτίνας CreateProcess δηλαδή την CreateProcessW συνεπώς, όπως παρατηρεί και το SDK Help, η ρουτίνα δεν δέχεται const char strings (LPSTR θέλει LPWSTR)). Αυτό συμβαίνει όταν έχουμε ζητήσει από τον Compiler να δημιουργεί Unicode εφαρμογές. Τι μπορεί να κάνεις; Ρύθμισε τον compiler ώστε να δέχεται ANSI, δοκίμασε να καλέσεις την CreateProcess ως CreateProcessA καλύτερη λύση όμως να δοκιμάσεις να τοποθετήσεις το "calc.exe" μέσα σε ένα TEXT macro ώστε να αποφασίσει ο compiler σε τι μορφή θα το μετατρέψει (Unicode ή ANSI), δηλαδή: CreateProcess(NULL,TEXT("calc.exe"), κτλ..
bilco Δημοσ. 19 Δεκεμβρίου 2007 Δημοσ. 19 Δεκεμβρίου 2007 Όπως λέει ο DirectX η καλύτερη λύση είναι με το μάκρο TEXT. Αλλιώς (αν θέλεις να χρησιμοποιείς πάντα τις ansi εκδόσεις των συναρτήσεων) >#undef UNICODE #include <windows.h> ... ή αν θέλεις να μείνουν τα πράγματα ως έχουν (unicode) και δεν σου αρέσει το μάκρο TEXT, βάζεις πριν από strings το πρόθεμα L (CreateProcess(NULL,L"calc.exe" ...)
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.