/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Kan dette overhovedet lade sig gøre?
Fra : Kasper Byrdal Nielse~


Dato : 14-02-01 16:57

Hej i kloge hoveder! :)

Jeg har gået og funderet over om det kan lade sig gøre at kalde en procedure
eller function uden at kende navnet på den på forhånd...

Lad os nu f.eks. sige at jeg har 2 procedures (test1 og test2), Brugeren
indtaster "test1" i et felt på en form.
Det er nu meningen at en 3. procedure analyserer det indtastede og alt
afhængig af om der er indtastet "test1" eller "test2" køres den dertil
hørende procedure.

Det kunne jo nemt lade sige gøre med en if/else eller en case....men lad os
nu forestille os at vi har 50 forskellige procedures, så er det ikke længere
bare sådan lige...

Kan det ikke lade sig gøre at kalde denne procedure direkte??

Jeg håber at jeg har gjort mig forståelig, ellers så må jeg jo lige uddybe
lidt mere :)

Jeg vil gerne have en cc. til min email, på forhånd tak!
- Kasper Byrdal



 
 
Anders Holm Jensen (14-02-2001)
Kommentar
Fra : Anders Holm Jensen


Dato : 14-02-01 19:39

Du skal nok læse lidt om struktureret programmering !!
Der har du 7 strukturere :
- alm. sekvens
- If
- If else
- For
- while
- repeat
- case

De kan blandes ind i hinanden, men må ikke overlabbe hinanden.

Så den løsning du foreslå (sådan som jeg ser det), ville være ustruktureret,
fordi du sikkert vil komme til at bruge en GoTo statement, og den er
indbegrebet af ustruktureret programmering.

Men der er nok andre med et godt svar, eller en anden mening

--
Hilsen AHJ

Anders Holm Jensen


"Kasper Byrdal Nielsen" <byrdal@post.tele.dk> skrev i en meddelelse
news:96e9t5$1mv$1@news.inet.tele.dk...
> Hej i kloge hoveder! :)
>
> Jeg har gået og funderet over om det kan lade sig gøre at kalde en
procedure
> eller function uden at kende navnet på den på forhånd...
>
> Lad os nu f.eks. sige at jeg har 2 procedures (test1 og test2), Brugeren
> indtaster "test1" i et felt på en form.
> Det er nu meningen at en 3. procedure analyserer det indtastede og alt
> afhængig af om der er indtastet "test1" eller "test2" køres den dertil
> hørende procedure.
>
> Det kunne jo nemt lade sige gøre med en if/else eller en case....men lad
os
> nu forestille os at vi har 50 forskellige procedures, så er det ikke
længere
> bare sådan lige...
>
> Kan det ikke lade sig gøre at kalde denne procedure direkte??
>
> Jeg håber at jeg har gjort mig forståelig, ellers så må jeg jo lige uddybe
> lidt mere :)
>
> Jeg vil gerne have en cc. til min email, på forhånd tak!
> - Kasper Byrdal
>
>





Thomas P (15-02-2001)
Kommentar
Fra : Thomas P


Dato : 15-02-01 15:07

> Så den løsning du foreslå (sådan som jeg ser det), ville være
ustruktureret,
> fordi du sikkert vil komme til at bruge en GoTo statement, og den er
> indbegrebet af ustruktureret programmering.

Weeehoo GoTo og Label bør ikke komme med i Delphi 6 - hvis der er flere
med denne mening, så er I bare seje :) Anyways, så tror jeg altså godt det
kan gøres uden at komme ind på ustrukturens markedsplads ;)

--
- Thomas [blomme@post.com] [http://www.FlowCode.f2s.com]



Carsten (15-02-2001)
Kommentar
Fra : Carsten


Dato : 15-02-01 15:08

Hvis du nu lagde test1 og test2 ned i et DLL, så var det hele meget nemmere.
Så kan du nemlig lave getProcAddress("<hvad brugeren indtastede>") og så
kalde denne procedure. Programmet skal så blot kende antallet af parametre
og deres typer selv.

Alternativt kan du skifte til Java og så bruge reflection

Carsten

"Kasper Byrdal Nielsen" <byrdal@post.tele.dk> wrote in message
news:96e9t5$1mv$1@news.inet.tele.dk...
> Hej i kloge hoveder! :)
>
> Jeg har gået og funderet over om det kan lade sig gøre at kalde en
procedure
> eller function uden at kende navnet på den på forhånd...
>
> Lad os nu f.eks. sige at jeg har 2 procedures (test1 og test2), Brugeren
> indtaster "test1" i et felt på en form.
> Det er nu meningen at en 3. procedure analyserer det indtastede og alt
> afhængig af om der er indtastet "test1" eller "test2" køres den dertil
> hørende procedure.
>
> Det kunne jo nemt lade sige gøre med en if/else eller en case....men lad
os
> nu forestille os at vi har 50 forskellige procedures, så er det ikke
længere
> bare sådan lige...
>
> Kan det ikke lade sig gøre at kalde denne procedure direkte??
>
> Jeg håber at jeg har gjort mig forståelig, ellers så må jeg jo lige uddybe
> lidt mere :)
>
> Jeg vil gerne have en cc. til min email, på forhånd tak!
> - Kasper Byrdal
>
>



Thomas P (15-02-2001)
Kommentar
Fra : Thomas P


Dato : 15-02-01 15:14

> Alternativt kan du skifte til Java og så bruge reflection

Well... så kunne han jo ikke spørge denne geniale newsgroup om hjælp mere -
så hellere blive

--
- Thomas [blomme@post.com] [http://www.FlowCode.f2s.com]



Claus Christiansen (15-02-2001)
Kommentar
Fra : Claus Christiansen


Dato : 15-02-01 16:53


"Thomas P" <blomme@post.com> wrote in message
news:96go41$m6l$1@news.inet.tele.dk...
> > Alternativt kan du skifte til Java og så bruge reflection
>
> Well... så kunne han jo ikke spørge denne geniale newsgroup om hjælp
mere -
> så hellere blive

Mere enig kan man da ikke være.... :) og så burde GOTO været fjernet
allerede med D1!!

Claus
--
Claus Christiansen, TeamD member <cch@unipeople.dk>

Pythia: http://www.pythia.dk
Personal: http://www.bigfoot.com/~kruc
============================================-------------------------
"Gravitation can not be held responsible for people falling in love"
A. Einstein





Claus Christiansen (15-02-2001)
Kommentar
Fra : Claus Christiansen


Dato : 15-02-01 17:27


"Claus Christiansen" <cch@unipeople.dk> wrote in message
news:f6Ti6.4824$PC4.171696@news010.worldonline.dk...
>
> "Thomas P" <blomme@post.com> wrote in message
> news:96go41$m6l$1@news.inet.tele.dk...
> > > Alternativt kan du skifte til Java og så bruge reflection
> >
> > Well... så kunne han jo ikke spørge denne geniale newsgroup om hjælp
> mere -
> > så hellere blive
>
> Mere enig kan man da ikke være.... :) og så burde GOTO været fjernet
> allerede med D1!!

og derudover

* I can use LoadLibrary()/GetProcAddress() to call a function in a .DLL.
* Is there a similar way that I can call a function in the current
* application based on a string variable that contains the function name?
*
** Yes, if you export the function (just like a DLL) and have an exports
** clause in the dpr, then you can use GetProcAddres as normal (no need to
** load library - it is loaded), the Handle is that returned by
** GetCurrentTask, NOT application.handle.
**
** e.g.
**
** @Routine=GetProcAddress(GetCurrentTask,'MyRoutine');

eller (et eks. der ikke er helt pænt, men det skulle vist kunne vise
teknikken) - variablen m, skal selvfølgelig lige sættes til en instans af
TMethods

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
end;

TMethod = procedure;
TMethods = class
published
procedure A;
procedure B;
end;

var
m: TMethods;

procedure TForm1.Button1Click(Sender: TObject);
var
method: TMethod; { or whatever the method 'type' is }
begin
method := m.MethodAddress(edit1.text);

{ execute method by casting it to the appropriate method type }
TMethod(method);
end;

procedure TMethods.A;
begin
Form1.listbox1.items.add('A');
end;

procedure TMethods.B;
begin
Form1.listbox1.items.add('B');
end;


Claus

--
Claus Christiansen, TeamD member <cch@unipeople.dk>

Pythia: http://www.pythia.dk
Personal: http://www.bigfoot.com/~kruc
============================================-------------------------
"Gravitation can not be held responsible for people falling in love"
A. Einstein





Niels (niLLer) (15-02-2001)
Kommentar
Fra : Niels (niLLer)


Dato : 15-02-01 17:47

Just as I expected, Carsten came up with this:

>Hvis du nu lagde test1 og test2 ned i et DLL, så var det hele meget nemmere.
>Så kan du nemlig lave getProcAddress("<hvad brugeren indtastede>") og så
>kalde denne procedure. Programmet skal så blot kende antallet af parametre
>og deres typer selv.

Man kan da også bruge GetProcAddress() på sit eget program! Hvad skulle
der være i vejen for det?

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://www.niller.f2s.com/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- No longer Windozed!

Kasper Byrdal Nielse~ (16-02-2001)
Kommentar
Fra : Kasper Byrdal Nielse~


Dato : 16-02-01 10:41

Jeg takker for de mange gode (og kloge) råd....nu kan jeg vist komme videre!

M.v.h.
-Kasper



Christian Iversen (18-02-2001)
Kommentar
Fra : Christian Iversen


Dato : 18-02-01 01:03

> >Hvis du nu lagde test1 og test2 ned i et DLL, så var det hele meget
nemmere.
> >Så kan du nemlig lave getProcAddress("<hvad brugeren indtastede>") og så
> >kalde denne procedure. Programmet skal så blot kende antallet af
parametre
> >og deres typer selv.
>
> Man kan da også bruge GetProcAddress() på sit eget program! Hvad skulle
> der være i vejen for det?

Vist ikke noget! :)

Og hvis man bliver træt af det, kan man lave en Class der indeholder
samtlige methods man skal kalle.

Så kan man bruge TObject.MethodAddress(<methodname>);

Den skulle også kunne bruges

M.V.H, Christian "Flawless" Iversen



Thomas Schulz (16-02-2001)
Kommentar
Fra : Thomas Schulz


Dato : 16-02-01 16:33

> Hvis du nu lagde test1 og test2 ned i et DLL, så var det hele meget
nemmere.
> Så kan du nemlig lave getProcAddress("<hvad brugeren indtastede>") og så

Du kan også eksportere procedures i en normal exe (ikke Com) fil har jeg set
(jeg tror dog ikke de kan kaldes udefra) engang.

Thomas



Thomas Schulz (16-02-2001)
Kommentar
Fra : Thomas Schulz


Dato : 16-02-01 16:32

> Kan det ikke lade sig gøre at kalde denne procedure direkte??

1) Du kan vælge at eksportere alle procedures (normaltvis kun brugt ved
dlls), så er der vist en funktion, kan ikke huske navnet, der kan returnere
addressen på dem.
2) Muligvis/nok igennem RTTI (det vil så være metoder i stedet for) - kig i
typinfo.pas (og søg så på emnet RTTI på Delphi3000.com).

mvh.
Thomas Schulz



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

Månedens bedste
Årets bedste
Sidste års bedste