Avatar billede finger Nybegynder
11. juli 2003 - 13:13 Der er 12 kommentarer og
1 løsning

kald af Descructor i anden proces

i forlængelse af dette spørgsmål:
http://www.eksperten.dk/spm/372632

Jeg starter et c++ program fra mit c# program ved hjælp af Proces klassen i .NET. i C++ programmet er der en descructor der frigiver nogle rescourcer til bl.a. kommunikation med hardware.
Når jeg dræber C++ programmet ser det ud til at descructoren ikke bliver kaldt. jeg har prøvet følgende:

* Kill() I Process klassen
* Close() I Process klassen
* dispose() I Process klassen
* CloseHandle(IntPtr handle) i Kernel32
* ctrl+alt+del og stop processen manuelt

lige meget hvilken af disse jeg prøver så bliver descructoren ikke kaldt i c++ programmet. Hvordan fikser jeg dette? eller er det overhovedet muligt?
Avatar billede finger Nybegynder
11. juli 2003 - 13:18 #1
Mindre hjerne blødinng her på en fredag....
der skal selvfølgelig stå Destructor.... ikke descructor. sorry.
Avatar billede arne_v Ekspert
11. juli 2003 - 13:22 #2
Øh.

Problemet ligger vel slet ikke i C# programmet.

Problemet må jo ligge i C++ oprogrammet.

Det skal du have lavet om til at kalde den destructor for at frigøre
hardware resource, når programmet bliver slået i brædderne.

Den feature hedder normal en exit handler.
Avatar billede arne_v Ekspert
11. juli 2003 - 13:25 #3
#include <stdlib.h>

atexit
Avatar billede finger Nybegynder
11. juli 2003 - 13:26 #4
jooo.

jeg har også tænkt på at der kunne være noget galt med C++ programmet. nu ligger det bare sådan at C++ programmet blev brugt i mange år sammen med et andet c++ program og her virkede det fint. Jeg ved desværre ikke hvordan det blev lukket tidligere og der er bl.a. også derfor jeg tror at det er måden det bliver lukket på der er afgørende.
Avatar billede arne_v Ekspert
11. juli 2003 - 13:26 #5
Det er standard C/C++ løsningen.

Det er muligt der eksisterer noget Win32 specifikt også.
Avatar billede finger Nybegynder
11. juli 2003 - 13:27 #6
jeg har adgang til source på c++ programmet, men da jeg ikke kender c++ vil jeg ikke til at begynde at lave det om. lad mig bare sige at det ikke er en mulighed. Hvis det viser sig at der virkeligt er c++ programmet der er galt på den, må jeg finde en anden måde at løse det på.
Avatar billede arne_v Ekspert
11. juli 2003 - 13:27 #7
Kan du ikke kigge i det andet C++ program og se hvad det gør ?
Avatar billede finger Nybegynder
11. juli 2003 - 13:28 #8
jeg har ikke adgang til sourcen på det "andet" c++ program. kun det "første" som jeg vil integrere i c#
Avatar billede arne_v Ekspert
11. juli 2003 - 15:11 #9
Hm.

Er der noget i sourcen til det "første" som indikerer nogen form
for mekanisme til at bliv elukket pænt ned på ?
Avatar billede finger Nybegynder
11. juli 2003 - 15:13 #10
ja. der er i destructoren nogle kald til metoder der bruger underligende "OPOS" drivere (til salgs hardware) til at lukke hardwaren ned.
Avatar billede arne_v Ekspert
11. juli 2003 - 15:26 #11
Jeg mente noget der indikerer hvordan det andet C++ program evt. kunne
bede det lukke ned.

Noget som f.ekks. sigaction.
Avatar billede finger Nybegynder
11. juli 2003 - 15:32 #12
Ja det må der jo være, en jeg kan ikke umiddelbart finde det. Men jo du har ret der må være et eller andet til det.
Det kunne godt være at man skulle kigge i dybden og prøve at finde noget...
Avatar billede finger Nybegynder
24. juli 2003 - 14:15 #13
Det kunne så ikke lade sig gøre at kalde en destruktor i en anden proces. Har løst det på anden vis.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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