ďťż

Ładny brzuch

Mam funkcję do Delphi:
Zadeklarowane biblioteki:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StrUtils, IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer, IdHTTPServer, StdCtrls, IniFiles, ExtCtrls;
Kod funkcji:
function System(Cmd: string): string; var TmpFn: string; Tmp: Cardinal; Buf: array[0..8191] of Char; Hnd: THandle; SI: TStartupInfo; SA: TSecurityAttributes; PI: TProcessInformation; begin Result := ''; GetTempPath(SizeOf(Buf), Buf); GetTempFileName(Buf, 'ABC', 0, Buf); TmpFn := string(Buf); Cmd := '%ComSpec% /c ' + Cmd; ExpandEnvironmentStrings(@Cmd[1], Buf, SizeOf(Buf)); FillChar(SA, SizeOf(SA), 0); SA.nLength := SizeOf(SA); SA.bInheritHandle := True; Hnd := CreateFile(PChar(TmpFn), GENERIC_READ or GENERIC_WRITE, 0, @SA, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if Hnd = INVALID_HANDLE_VALUE then Exit; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SA); SI.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; SI.hStdOutput := Hnd; SI.hStdError := Hnd; SI.wShowWindow := SW_HIDE; if CreateProcess(nil, Buf, nil, nil, True, 0, nil, nil, SI, PI) then begin WaitForSingleObject(PI.hProcess, INFINITE); CloseHandle(PI.hThread); CloseHandle(PI.hProcess); SetLength(Result, GetFileSize(Hnd, nil)); SetFilePointer(Hnd, 0, nil, FILE_BEGIN); ReadFile(Hnd, Result[1], Length(Result), Tmp, nil); end; CloseHandle(Hnd); DeleteFile(PChar(TmpFn)); end;
Czy ktoś mógłby zrobić mi z tego plik DLL w Delphi i później pomóc uzyć jej w BCB? Kod pochodzi z programu HTTPD z 4p, gadałem z jego autorem ale niestety nie miał czasu. To dla mnie bardzo ważne. Służy on do obsługi PHP na serwerze WWW postawionym na INDY. Nie ma niestety Delphi i nie chce ściągac dla jednej rzeczy.
Użytkownik confident edytował ten post 20 czerwiec 2006, 12:51


Przetlumacz sobie na bcb, co za problem? :huh:
Użytkownik Kajetanek edytował ten post 20 czerwiec 2006, 15:14
Zatrzymuję się tutaj:
ExpandEnvironmentStrings(@Cmd[1], Buf, SizeOf(Buf));
A ponadto wywala błąd, że nie ma takiej funkcji jak FillChar.


ExpandEnvironmentStrings(Cmd.c_str(),Buf,sizeof(Buf)) ; memset(&SA,sizeof(SA),0);



Cyrkiel pomozesz jeszcze raz? :P
Oto fragmeny kodu, których przetłumaczyc za nic nie umiem:
Hnd = CreateFile(TmpFn.c_str(), GENERIC_READ || GENERIC_WRITE, 0, &SA, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
Wywala błąd:

[C++ Error] Unit1.cpp(44): E2034 Cannot convert 'void *' to 'unsigned int'

SetLength(Result, GetFileSize(&Hnd, NULL)); SetFilePointer(&Hnd, 0, NULL, FILE_BEGIN); ReadFile(&Hnd, Result[1], Length(Result), Tmp, NULL);
Wywala błędy:

[C++ Error] Unit1.cpp(58): E2268 Call to undefined function 'SetLength'
[C++ Error] Unit1.cpp(58): E2451 Undefined symbol 'Result'
[C++ Error] Unit1.cpp(60): E2268 Call to undefined function 'Length'
[C++ Error] Unit1.cpp(60): E2034 Cannot convert 'unsigned int' to 'unsigned long *'
[C++ Error] Unit1.cpp(60): E2342 Type mismatch in parameter 'lpNumberOfBytesRead' (wanted 'unsigned long *', got 'unsigned int')


Zmienna Result jest uzywana już na początku kodu ale nigdzie nie jest zadeklarowana. Co z nią zrobic?
Użytkownik confident edytował ten post 21 czerwiec 2006, 09:01

memset(&SA,sizeof(SA),0);

A jak zamienić funkcje Lenght i SetLenght?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •