Avatar billede powerj Nybegynder
19. marts 2007 - 09:57 Der er 6 kommentarer og
1 løsning

error C2440 cannot convert from char to TCHAR

Jeg har lidt problemer med min kode.

Får denne fejl:

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

i linien:

pEnvCMD = getenv("COMSPEC");

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

//---------------------------------------------------------------------------
DWORD RunProgram (TCHAR* _tcsFunct, TCHAR* _tcsstrParams, bool hide)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
TCHAR Args[4096];
TCHAR *pEnvCMD = NULL;
TCHAR *pDefaultCMD = _T("CMD.EXE");
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){

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

_tcscat(Args, _T(" /c "));

_tcscat(Args, _tcsFunct);
_tcscat(Args, _T(" "));
_tcscat(Args, _tcsstrParams);

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 jpk Nybegynder
19. marts 2007 - 10:04 #1
Hvis det er MSVC++ mener jeg du kan bruge en macro, enten T eller _T, altså:

pEnvCMD = getenv(T("COMSPEC"));
eller
pEnvCMD = getenv(_T("COMSPEC"));
Avatar billede powerj Nybegynder
19. marts 2007 - 10:09 #2
Den har jeg prøvet, det resulterer i fejlen
error C2664: 'getenv' : cannot convert parameter 1 from 'const wchar_t [8]' to 'const char *'
Avatar billede arne_v Ekspert
19. marts 2007 - 12:47 #3
prøv:

  USES_CONVERSION;
  pEnvCMD = A2W(getenv("COMSPEC"));
Avatar billede powerj Nybegynder
19. marts 2007 - 13:00 #4
den prøvede, men resulterede i at jeg fik fejl på at bl.a. A2W ikke var defineret.
Nu har jeg prøvet at include AFXPRIV.H med følgende resultat:

fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Avatar billede arne_v Ekspert
19. marts 2007 - 13:37 #5
jeg ville prøve at inkludere:

#include <afx.h>
#include <objbase.h>
#include <oleauto.h>
#include <wtypes.h>
#include <atlconv.h>
Avatar billede arne_v Ekspert
19. marts 2007 - 13:38 #6
med hensyn til linkning kan jeg ikke huske hvad man skal, men det må vel
være til at eksperimentere sig frem til
Avatar billede mr_chaos Praktikant
29. marts 2007 - 16:31 #7
prøv at bruge _tgetenv istedet for getenv
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