Von Delphi in C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Von Delphi in C/C++

    Hi,

    bin kein Delphi-Kenner..wer kann mit diesen Code funktionsfähig in C oder C++ umschreiben!??? Danke

    Quellcode

    1. function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
    2. var
    3. StartupInfo: TStartupInfo;
    4. ProcessInfo: TProcessInformation;
    5. SecurityAttr: TSecurityAttributes;
    6. PipeOutputRead: THandle;
    7. PipeOutputWrite: THandle;
    8. PipeErrorsRead: THandle;
    9. PipeErrorsWrite: THandle;
    10. Succeed: Boolean;
    11. Buffer: array [0..255] of Char;
    12. NumberOfBytesRead: DWORD;
    13. Stream: TMemoryStream;
    14. begin
    15. //Initialisierung ProcessInfo
    16. FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
    17. //Initialisierung SecurityAttr
    18. FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
    19. SecurityAttr.nLength := SizeOf(SecurityAttr);
    20. SecurityAttr.bInheritHandle := true;
    21. SecurityAttr.lpSecurityDescriptor := nil;
    22. //Pipes erzeugen
    23. CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
    24. CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);
    25. //Initialisierung StartupInfo
    26. FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
    27. StartupInfo.cb:=SizeOf(StartupInfo);
    28. StartupInfo.hStdInput := 0;
    29. StartupInfo.hStdOutput := PipeOutputWrite;
    30. StartupInfo.hStdError := PipeErrorsWrite;
    31. StartupInfo.wShowWindow := sw_Hide;
    32. StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    33. if CreateProcess(nil, PChar(command), nil, nil, true,
    34. CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
    35. StartupInfo, ProcessInfo) then begin
    36. result:=true;
    37. //Write-Pipes schließen
    38. CloseHandle(PipeOutputWrite);
    39. CloseHandle(PipeErrorsWrite);
    40. //Ausgabe Read-Pipe auslesen
    41. Stream := TMemoryStream.Create;
    42. try
    43. while true do begin
    44. succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
    45. if not succeed then break;
    46. Stream.Write(Buffer, NumberOfBytesRead);
    47. end;
    48. Stream.Position := 0;
    49. Output.LoadFromStream(Stream);
    50. finally
    51. Stream.Free;
    52. end;
    53. CloseHandle(PipeOutputRead);
    54. //Fehler Read-Pipe auslesen
    55. Stream := TMemoryStream.Create;
    56. try
    57. while true do begin
    58. succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil);
    59. if not succeed then break;
    60. Stream.Write(Buffer, NumberOfBytesRead);
    61. end;
    62. Stream.Position := 0;
    63. Errors.LoadFromStream(Stream);
    64. finally
    65. Stream.Free;
    66. end;
    67. CloseHandle(PipeErrorsRead);
    68. WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    69. CloseHandle(ProcessInfo.hProcess);
    70. end
    71. else begin
    72. result:=false;
    73. CloseHandle(PipeOutputRead);
    74. CloseHandle(PipeOutputWrite);
    75. CloseHandle(PipeErrorsRead);
    76. CloseHandle(PipeErrorsWrite);
    77. end;
    78. end;
    Alles anzeigen
  • Hab ehrlichgesagt keine Lust dir deinen Code zu übersetzen. Auch wenn du kein Delphi kannst, verstehst du ja wohl was da passiert und wirst es in C++ umschreiben können oder?
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]
  • Quellcode

    1. bool GetConsoleOutput(String sCommandLine, TStringList *Output, TStringList *Errors)
    2. {
    3. STARTUPINFO StartupInfo;
    4. PROCESS_INFORMATION ProcessInfo;
    5. SECURITY_ATTRIBUTES SecurityAttr;
    6. HANDLE PipeOutputRead, PipeOutputWrite, PipeErrorsRead, PipeErrorsWrite;
    7. bool bSucceed, bResult;
    8. char Buffer[255];
    9. DWORD dwNumberOfBytesRead;
    10. TMemoryStream *Stream;
    11. //Initialisierung ProcessInfo
    12. ZeroMemory( &ProcessInfo, sizeof(PROCESS_INFORMATION));
    13. //Initialisierung SecurityAttr
    14. ZeroMemory( &SecurityAttr, sizeof(SECURITY_ATTRIBUTES));
    15. SecurityAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
    16. SecurityAttr.bInheritHandle = TRUE;
    17. SecurityAttr.lpSecurityDescriptor = NULL;
    18. //Pipes erzeugen
    19. if (!CreatePipe(&PipeOutputRead, &PipeOutputWrite, &SecurityAttr, 0))
    20. return false;
    21. if (!CreatePipe(&PipeErrorsRead, &PipeErrorsWrite, &SecurityAttr, 0))
    22. return false;
    23. //Initialisierung StartupInfo
    24. ZeroMemory( &StartupInfo, sizeof(STARTUPINFO));
    25. StartupInfo.cb = sizeof(STARTUPINFO);
    26. StartupInfo.hStdInput = 0;
    27. StartupInfo.hStdOutput = PipeOutputWrite;
    28. StartupInfo.hStdError = PipeErrorsWrite;
    29. StartupInfo.wShowWindow = SW_HIDE;
    30. StartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    31. if(CreateProcess(NULL, sCommandLine.c_str(), NULL, NULL,
    32. TRUE, CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInfo))
    33. {
    34. bResult = true;
    35. //Write-Pipes schließen
    36. CloseHandle(PipeOutputWrite);
    37. CloseHandle(PipeErrorsWrite);
    38. //Ausgabe Read-Pipe auslesen
    39. Stream = new TMemoryStream;
    40. try
    41. {
    42. while (true)
    43. {
    44. bSucceed = ReadFile(PipeOutputRead, Buffer, 255, &dwNumberOfBytesRead, NULL);
    45. if (!bSucceed) break;
    46. Stream->Write(Buffer, dwNumberOfBytesRead);
    47. }
    48. Stream->Position = 0;
    49. Output->LoadFromStream(Stream);
    50. }
    51. __finally
    52. {
    53. delete Stream;
    54. }
    55. CloseHandle(PipeOutputRead);
    56. //Fehler Read-Pipe auslesen
    57. Stream = new TMemoryStream;
    58. try
    59. {
    60. while (true)
    61. {
    62. bSucceed = ReadFile(PipeErrorsRead, Buffer, 255, &dwNumberOfBytesRead, NULL);
    63. if (!bSucceed) break;
    64. Stream->Write(Buffer, dwNumberOfBytesRead);
    65. }
    66. Stream->Position = 0;
    67. Errors->LoadFromStream(Stream);
    68. }
    69. __finally
    70. {
    71. delete Stream;
    72. }
    73. CloseHandle(PipeErrorsRead);
    74. WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    75. CloseHandle(ProcessInfo.hProcess);
    76. }
    77. else
    78. {
    79. bResult = false;
    80. CloseHandle(PipeOutputRead);
    81. CloseHandle(PipeOutputWrite);
    82. CloseHandle(PipeErrorsRead);
    83. CloseHandle(PipeErrorsWrite);
    84. }
    85. return bResult;
    86. }
    Alles anzeigen