Avatar billede powerj Nybegynder
19. marts 2007 - 01:12 Der er 10 kommentarer

cannot convert parameter 2 from 'char [4096]' to 'LPWSTR'

error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'char [4096]' to 'LPWSTR'

Jeg får følgende fejlmedd.
Nogen der kan sige mig hvad der går galt?

//---------------------------------------------------------------------------
#pragma argsused
#pragma hdrstop
#include "windows.h"
#include <tchar.h>
#include <stdlib.h>

//---------------------------------------------------------------------------
DWORD RunProgram (char* strFunct, bool hide)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
char Args[4096];
char *pEnvCMD = NULL;
char *pDefaultCMD = "CMD.EXE";
char* strstrParams;
ULONG rc;

memset(&StartupInfo, 0, sizeof(StartupInfo));
StartupInfo.cb = sizeof(STARTUPINFO);

StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_SHOW;


if (hide)
    {
    StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow = SW_HIDE;
  }

Args[0] = 0;
   
pEnvCMD = getenv("COMSPEC");

if(pEnvCMD){

  strcpy(Args, pEnvCMD);
}
else{
  strcpy(Args, pDefaultCMD);
}

strcat(Args, " /c ");

strcat(Args, strFunct);
strcat(Args, " ");
strcat(Args, strstrParams);
 
if (!CreateProcess( NULL, Args, NULL, NULL, FALSE,
  CREATE_NEW_CONSOLE,
  NULL,
  NULL,
  &StartupInfo,
  &ProcessInfo))
{
  return GetLastError();
}

WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
if(!GetExitCodeProcess(ProcessInfo.hProcess, &rc))
  rc = 0;

CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);

return rc;

}
Avatar billede bertelbrander Novice
19. marts 2007 - 01:18 #1
Er det linjen med CreateProcess?
Har du sat projektet til at køre "MultiByte" eller "Unicode"?
Skal det køre en af disse?
Avatar billede powerj Nybegynder
19. marts 2007 - 01:23 #2
Jep det er i create process. Jeg kalder RunProgram ("c:\\installtool.exe","",1); fra mit program.
Jeg kører Unicode
Avatar billede arne_v Ekspert
19. marts 2007 - 01:27 #3
TCHAR Args[4096];

og erstat alle str* funktioner med _tcs* funktioner og alle "xxx" med _T("xxx")
Avatar billede powerj Nybegynder
19. marts 2007 - 01:27 #4
Det løste mit problem at sætte det til MultiByte.
Avatar billede powerj Nybegynder
19. marts 2007 - 01:32 #5
Jeg kigger lige herind i morgen igen. Jeg får ikke punkterne frem hvor jeg kan acceptere svaret.
Avatar billede powerj Nybegynder
19. marts 2007 - 09:22 #6
jeg mangler et svar istedet for en kommentar for at give point
Avatar billede powerj Nybegynder
19. marts 2007 - 09:49 #7
Det gik ik helt med MultiByte. Jeg ved ikke helt om det er derfor jeg får fejl hvis jeg prøver at køre det på andre maskiner end min.

Jeg prøver nu at få det til at virke med TCHAR og _tcs i stedet.

Jeg får dog en fejl her:
pEnvCMD = getenv("COMSPEC");

if(pEnvCMD){

  _tcscpy(Args, pEnvCMD);
^^'wcscpy' : cannot convert parameter 2 from 'char *' to 'const wchar_t *^^

}
else{
  _tcscpy(Args, pDefaultCMD);
}
Avatar billede powerj Nybegynder
19. marts 2007 - 09:54 #8
Hvis jeg sætter *pEnvCMD til TCHAR istedet for char, får jeg fejlen

error C2440: '=' : cannot convert from 'char *' to 'TCHAR *   

i linien pEnvCMD = getenv("COMSPEC");

Jeg opretter dette spørgsmål på ny, da jeg mener det bør give lidt flere point at løse
Avatar billede powerj Nybegynder
19. marts 2007 - 09:57 #9
Avatar billede arne_v Ekspert
06. maj 2007 - 23:11 #10
så luk her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester