/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Returnere streng fra eksternt program
Fra : Claus Holm


Dato : 15-05-01 14:40

Jeg skal lave et kald fra VB til et eksternt program. Dette program
returnerer en streng afhængig af de parametre, programmet kaldes med.

Jeg troede, at jeg kunne bruge shell, men den returnerer kun task id, hvis
det gik godt og nul, hvis det gik skidt.

Spørgsmålet er kort og godt, hvordan jeg får tekststrengen returneret til en
variabel, som jeg kan arbejde videre med?

Venligst,
Claus Holm - http://www.holmcomputer.dk



 
 
Chris (15-05-2001)
Kommentar
Fra : Chris


Dato : 15-05-01 15:30

On Tue, 15 May 2001 15:40:02 +0200, "Claus Holm"
<clh@ccieuropeREMOVE.com> wrote:

>Jeg skal lave et kald fra VB til et eksternt program. Dette program
>returnerer en streng afhængig af de parametre, programmet kaldes med.
>
>Jeg troede, at jeg kunne bruge shell, men den returnerer kun task id, hvis
>det gik godt og nul, hvis det gik skidt.
>
>Spørgsmålet er kort og godt, hvordan jeg får tekststrengen returneret til en
>variabel, som jeg kan arbejde videre med?

Du skal lege lidt med API.

Jeg har en C kode (ren Windows API), der klarer problemet (sorry, jeg
er ikke inde i VB).

Hvis nogen skulle føle sig generet af mine C-kommentarer, så sig til.
Der er jo blot det at API stort set er det samme i C som i VB eller
Delphi.

<snip>

DWORD dwBytesRead;
HANDLE hErrorWrite, hInputRead, hInputWrite, hInputWriteTmp,
hOutputRead, hOutputReadTmp, hOutputWrite;
LONG nBytesToRead;
PBYTE pBuffer;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;

sa.nLength = sizeof (SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;

CreatePipe (hOutputReadTmp, hOutputWrite, &sa, 0);
DuplicateHandle (GetCurrentProcess (), hOutputWrite, GetCurrentProcess
(), &hErrorWrite, 0, TRUE, DUPLICATE_SAME_ACCESS);
CreatePipe (hInputRead, hInputWriteTmp, &sa, 0);
DuplicateHandle(GetCurrentProcess (), hOutputReadTmp,
GetCurrentProcess (), &hOutputRead, 0, FALSE, DUPLICATE_SAME_ACCESS);
DuplicateHandle(GetCurrentProcess (), hInputWriteTmp,
GetCurrentProcess (), &hInputWrite, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle (hOutputReadTmp);
CloseHandle (hInputWriteTmp);

ZeroMemory (&si, sizeof (STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = hInputRead;
si.hStdOutput = hOutputWrite;
si.hStdError = hErrorWrite;
si.wShowWindow = SW_HIDE;

CreateProcess (NULL, "program.exe --parameter", &sa, &sa, TRUE, 0,
NULL, NULL, &si, &pi);
CloseHandle (hOutputWrite);
CloseHandle (hInputRead);
CloseHandle (hErrorWrite);

nBytesToRead = GetFileSize (hOutputRead, NULL);
pBuffer = (PBYTE) HeapAlloc (GetProcessHeap (), 0, nBytesToRead + 2);

ReadFile (hOutputRead, pBuffer, nBytesToRead, &dwBytesRead, NULL);
pBuffer[dwBytesRead] = '\0';

HeapFree (GetProcessHeap (), 0, pBuffer);

</snip>

'pBuffer' indeholder nu outputtet fra det kørte program, og kan sættes
ind i en EDIT kontrol eller andet steds.

kh
Chris Hansen

P.S. Hvis du ikke er inde i C, så kan nogle andre her i gruppen måske
hjælpe med at oversætte koden til VB.

Claus Holm (15-05-2001)
Kommentar
Fra : Claus Holm


Dato : 15-05-01 21:27

On Tue, 15 May 2001 14:29:38 GMT, dsl3353@vip.cybercity.dk (Chris)
wrote:

[klip]
>P.S. Hvis du ikke er inde i C, så kan nogle andre her i gruppen måske
>hjælpe med at oversætte koden til VB.

Jeg er ikke inde i C, - et (kraftigt) hint/eksempel i VB ville være
dejligt! - Anyone?

Claus Holm - http://www.holmcomputer.dk

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408942
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste