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

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

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

  • 0
air560002000

C++ Widows

Ερώτηση

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

2 απαντήσεις σε αυτή την ερώτηση

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

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

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

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

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...