Προς το περιεχόμενο

C++ Widows


air560002000

Προτεινόμενες αναρτήσεις

Δημοσ.

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

Δημοσ.

Αν και δεν χρησιμοποιώ το 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"), κτλ..

Δημοσ.

Όπως λέει ο DirectX η καλύτερη λύση είναι με το μάκρο TEXT.

Αλλιώς (αν θέλεις να χρησιμοποιείς πάντα τις ansi εκδόσεις των συναρτήσεων)

>#undef UNICODE
#include <windows.h>
...

ή αν θέλεις να μείνουν τα πράγματα ως έχουν (unicode) και δεν σου αρέσει το μάκρο TEXT, βάζεις πριν από strings το πρόθεμα L (CreateProcess(NULL,L"calc.exe" ...)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...