Autor Beitrag
Dietmar1961
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 03.08.07 16:36 
Hallo Liebe Community

ich hätte da mal eine Frage bzgl Aufruf einer überladenen Funktion in einer selbst erstellten DLL.
Das funktioniert bei mir nicht so richtig. Vielleich kann mir ja einer von euch helfen. Wo ist mein Denkfehler.
er ruft immer die gleiche Funtion auf und dann (wenn die zweite verwendet werden müsste) kommt eine 'Access violation'


Hier mal meine Dll mit zwei überladenen Funktionen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
library DllTest;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

function Test(const test1: ShortString; const test2: ShortInt): ShortString; overload;
begin
  Showmessage('Test Version 1');
end;

function Test(const test1: ShortString; test2: ShortString=''const test3: ShortInt=7): ShortString; overload;
begin
  Showmessage('Test Version 2');
end;


exports
  Test(const test1: ShortString; const test2: ShortInt),
  Test(const test1: ShortString; test2: ShortString=''const test3: ShortInt=7);
begin
end.


meine Einbindung in den Code
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
unit uTest;

interface
  function Test(const test1: ShortString; const test2: ShortInt): ShortString; overload;
  function Test(const test1: ShortString; test2: ShortString=''const test3: ShortInt=7): ShortString; overload;

implementation

function Test(const test1: ShortString; const test2: ShortInt): ShortString; overload;
external 'DllTest.dll';

function Test(const test1: ShortString; test2: ShortString=''const test3: ShortInt=7): ShortString; overload;
external 'DllTest.dll';

end.


Rufe ich die Funktion wie folgt auf
Test('Hallo'); => Version 2 sollte und ist aufgerufen worden
Test('Hallo',1); => Version 1 sollte ist aber nicht aufgerufen worden ?????????????
sobald ich diese Version aufrufe => !!!!!ACCESS VIOLATION !!!!!
Test('Hallo','Welt') wie 1
Test('Hallo','Welt',8 ) wie 1

Wäre klasse, wenn mir einer meinen Fehler zeigen könnte.

Vielen Dank im Voraus und an dieses prima Forum

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 03.08.07 17:18 
Du exportierst zwei Funktionen mit dem gleichen Namen, wodurch dein aufrufendes Programm diese nicht mehr unterscheiden kann. Nutze die Name-Direktive, um allen exportierten Funktionen einen eindeutigen Namen zu geben ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 03.08.07 17:59 
user profile iconDietmar1961 hat folgendes geschrieben:
Hallo Liebe Community

ich hätte da mal eine Frage bzgl Aufruf einer überladenen Funktion in einer selbst erstellten DLL.
Das funktioniert bei mir nicht so richtig. Vielleich kann mir ja einer von euch helfen. Wo ist mein Denkfehler.
er ruft immer die gleiche Funtion auf und dann (wenn die zweite verwendet werden müsste) kommt eine 'Access violation'
...
Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Hallo,

die DLL-Schnittstelle ist sozusagen der kleinste gemeinsame Nenner vieler Programmiersprachen, überladene Funktionen gibt es einfach nicht. Namen und Parameter aller Funktionen müssen eindeutig sein.

Du kannst höchstens so etwas wie offene Listen übergeben, z.B. mehrere Nullterminierte Strings (PChar) mit einer Doppel-0 am Ende.

Gruss Reinhard
Dietmar1961 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 03.08.07 20:22 
@BenBe
Danke aber aus diesem Grunde handelt es sich ja um überladene Funktionen, die anhand der Übergabeparameter unterscheidbar sind

@Reinhard
danke für die Erläuterung das leuchtet ein.

Ich denke damit ist meine Frage beantwortet.