Avatar billede whynot Nybegynder
01. oktober 2004 - 12:14 Der er 7 kommentarer og
1 løsning

returnering af string fra function i DLL

Hejsa...

jeg loader dynamisk nogle procedurer som åbner nogle forms i en dll ind i mit hovedprogram... MEN jeg vil gerne kunne gøre andet end blot at åbne forms... men hvordan gør jeg dette dynamisk?

Jeg ved godt at jeg kan gøre følgende:

function modulnavn: string; stdcall; external 'project1dll.dll' name 'modulnavn';

i dll-filen er funktionen skrevet sådan:
function modulnavn: string; stdcall;
begin
result:='standard form';
end;

..og bliver eksporteret:

exports
modulnavn;

men når jeg i hovedprogrammet kalder functionen med showmessage(modulnavn); så viser den godt nok en besked med 'standard form' men lige efter får jeg en pointer fejl??

Desuden er jeg lidt irriteret over at skulle erklære functionen modulnavn i hovedprogrammet og ikke loade den dynamisk - som ellers virker fino med formshow / formshowmodal.

derfor to spørgsmål:
- hvad skyldes min pointer fejl?
- hvordan gør jeg "modulnavn" dynanmisk.?
Avatar billede martinlind Nybegynder
01. oktober 2004 - 12:17 #1
Prøv med PChar i stedet for String
Avatar billede whynot Nybegynder
01. oktober 2004 - 12:22 #2
hey fedt nok.. det fjernede fejlen jvf. spm. 1 :) ved ikke lige hvorfor pchar virker og ikke string - gør du det?
Avatar billede whynot Nybegynder
01. oktober 2004 - 12:50 #3
ja okey det ved jeg så selv nu...

hvis man skal overføre af typen string så skal man huske at have sharemem med i uses clausen i dll-filen.. tjek selv denne artikkel: http://archive.devx.com/dbzone/articles/hg0102/hg0102-2.asp
Avatar billede martinlind Nybegynder
01. oktober 2004 - 13:00 #4
Når ja, det kan jeg godt huske, der er vist også noget med at den skal stå først.
Avatar billede whynot Nybegynder
01. oktober 2004 - 13:30 #5
jeps... men jeg har også fundet ud af at gøre functionen dynamisk..

Men jeg er stadig et spørgsmåltegn overfor hvordan man tilgår en dll dynamisk.. dvs. ikke så meget handlingen, men mere problematikken om at, ja det er da fint at lave moduler som kan gøre hovedprogrammet "anderledes" alt efter hvilke dll-filer som er tilstede.. men skal de alle have de samme functions og procedures - hvad er så det smarte ved dem? kan man regne med at forskellige dll/moduler alle kan have ens indgange? kan man ikke tjekke for disse exports ved load, og tilgå disse dynamisk?
Avatar billede stoney Nybegynder
01. oktober 2004 - 13:41 #6
Borrisholt har lavet en artikel om brug af dynamisk DLL

http://www.udvikleren.dk/article.php?aid=49&techid=2

Stoney
Avatar billede martinlind Nybegynder
01. oktober 2004 - 13:50 #7
the Delphimagazine havde også en fed artikel om Dynamisk-package handling
Avatar billede whynot Nybegynder
01. oktober 2004 - 13:56 #8
jeps har læst den fra borris.. men den forklarer bare ikke hvordan man gør tingene dynamiske - altså hvordan man afkoder en dll for dens funktionalitet og laver handles til den. Jeg har selv fundet ud af at sætte de forskellige pointers til de forskellige methods. Men jeg har en forståelsesmæssig barrierre hvor jeg ikke forstår opbygningen af dll/moduler.

Altså hvordan man laver fornuftige kald som er så generelle at de kan dække alle mulige fremtidige modulers "adfærd" / opbygning / funktionalitet. Det er nemt hvis man blot åbner en form som kalder alle sine procedurer internt i dll-filen.. men hvad så når man ikke har en form?

jeg vil prøve at læse delphimagazines artikkel.. men jeg tror faktisk nok at jeg har læst den for et stykke tid siden.
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