Avatar billede justincase1089 Nybegynder
08. april 2003 - 15:27 Der er 8 kommentarer og
1 løsning

Pointer igennem et COM interrface

Hejsa

Jeg har et program med et COM interface. Igennem dette com interface vil jeg gerne give en pointer. Jeg har være inde under Valid types i online hjælpen, men kan ikke finde en pointer. Er der en der kan fortælle mig hvilken type jeg vælger?

MVH Justin Case
Avatar billede tolderlund Nybegynder
09. april 2003 - 14:08 #1
En pointer er kun valid inde i dit eget program.
Andre programmer kan ikke bruge pointeren til noget.
Så spørgsmålet er, hvad vil du egentlig med den pointer?
Avatar billede justincase1089 Nybegynder
09. april 2003 - 18:58 #2
Jeg ville teste netop det du siger.

Jeg har en model. For hvert tidsskridt er der således beregnet værdier som jeg gerne vil kunne tilgå udefra. Min implementering indtil videre indeholder en binær søgning på det rigtige element ud fra id for derefter at returnere en double. Jeg har haft stor succes med fra en dll at returnere en pointer til den beregnede double, hvilket er den hurtigste måde at gøre dette på hvis det er en "in process" dll. Problemet er bare når det så bliver en out of process COM server, idet at slå op hver gang og returnere en double i mit tilfælde her er omtrent 50 gange langsommere. Derfor ville jeg teste muligheden for at kunne referere direkte til doublen i hukommelsen. Hvis der er andre muligheder for at løse mit problem hører jeg gerne det. Giver det jeg skriver her mening?

Justin Case

P.S tolderlund, du står p.t. nummer 1 til pointene, men jeg vil gerrne have lidt mere diskussion om mit problem.
Avatar billede tolderlund Nybegynder
09. april 2003 - 19:55 #3
Jeg tror nok det giver mening det du skriver.
Er det du vil at sender din pointer fra COM serveren til din klient?
Hvor klienten så senere sender samme pointer tilbage til COM serveren for at få en double returneret?
Så er det ikke noget problem, idet COM serveren godt kan bruge sine "egen" pointer. Du skal blot ikke brugue den til noget i din klient, andet end at opbevare den og sende den til COM serveren senere.
Du skal bare være sikker på at den pointer som COM serveren modtager senere stadig er valid, dvs. peger på noget der findes stadigvæk i COM serveren.
For at sende en pointer kan du simpelthen caste den til en integer.
Det vil virke da en pointer og en integer begge fylder 4 bytes.
Du gør sådan:
  MyInteger := Integer(MyPointer);
Og omvendt:
  MyPointer := Pointer(MyInteger);
Avatar billede justincase1089 Nybegynder
09. april 2003 - 20:17 #4
Jaej, ikke helt.

Klienten spørger efter en pointer til en double beregnet inden i serveren ud fra et id.

Serveren søger derefter sine beregningsstrukturer igennem for at finde den pointer til en double der svarer til det ønskede id.

Klienten typecaster derefter bare pointeren ned i en double.

Justin Case
Avatar billede tolderlund Nybegynder
09. april 2003 - 21:16 #5
Hvis det er en double klienten i realiteten skal bruge, så giv dog klienten en double.
Det da nemmere at klienten spørger udfra id og serveren søger beregningsstrukturerne igennem for at finde den double der svarer til det ønskede id, og returnerer så den pågældende double.
Det er da mere simpelt på den måde.
Der er ingen grund til at serveren returnerer en pointer som klienten skal typecaste bagefter.
Serveren kan ligeså godt returnere en double med det samme.
Avatar billede justincase1089 Nybegynder
09. april 2003 - 21:17 #6
Ja, hvis ikke det lige var for hastigheden der var 50 gange langsommere på grund af en gigantisk intern struktur
Avatar billede tolderlund Nybegynder
09. april 2003 - 23:11 #7
Du er nødt til at indse at du ikke kan bruge pointere gennem COM.
Avatar billede justincase1089 Nybegynder
09. april 2003 - 23:56 #8
Jeg tror ikke, at problemet ligger så meget i at det er gennem COM, men derimod at det er imellem to applikationer der ikke deler adresseområde. Spørgsmålet er så, om det er muligt at "oversætte" pointeren til en "global pointer" inden den sendes igennem COM interfacet. Hvis du har flere kommentarerr vil jeg meget gerne høre dem, men du får pointene alligevel. Tak

Justin Case
Avatar billede tolderlund Nybegynder
10. april 2003 - 07:22 #9
COM bevirker netop at klienten og serveren kører i hver sin process.
Og pointere er kun valide indenfor den samme process.
Det du kan gøre i stedet for er at bruge memory mapped files. Det muligør at lave et hukommelsesområde som begge programmer kan benytte.
Om det så er hurtigere ved jeg ikke, men du kan jo prøve.
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