Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 19.12.07 15:33 
Wie kann ich eine DLL so schreiben, dass ich von anderen Programmen aus eine Funktion mit Stringparameter aufrufen kann.

also z.b.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure showm(m:String);
begin
showmessage(m);
end;


was muss ich da beachten? welche aufrufconvention brauche ich (stdcall?)
welche typen? String geht ja so nicht.
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mi 19.12.07 17:44 
Um Strings in DLLs und Programmen zu verwenden, brauchst du wegen der dynamischen Speicherverwaltung die sharemem.dll, die bei Delphi dabei ist. Das kannst du aber umgehen, wenn du statt String PChar verwendest:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure showm(m:PChar);
begin
showmessage(m);
end;

Und im Programm:
ausblenden Delphi-Quelltext
1:
2:
3:
...
showm(PChar(MyString));
...

Die Aufrufkonvention kannst du, wenn du die DLL nur mit Delphi verwendest, lassen wie sie ist. Ansonsten bietet sich stdcall an.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 19.12.07 18:15 
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 20.12.07 15:22 
das problem ist: die dll ist für jemand der sie mit autoplay media studio benutzen will...
und das hat keine delphi sharemem...
wegen typ muss ich gucken ob der das überhaupt kennt...
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 20.12.07 15:40 
In diesem Fall solltest du ausschliechlich mit pChar arbeiten. Was ja schlicht und einfach nur ein Pointer auf einen Speicherberech ist der mit #0 endet.

Innerhalb der DLL solltst du mit solchen pChars Problemlos arbeiten können. Entweder castest du sie als String was eine internen Konvertierung nach sich zieht (wenn ich mich gerade nicht ganz vertue) oder aber du arbeitst dauerhaft mit pChar. Ganz nach belieben. Spielt dabei aber für Delphi keine Rolle.

Und die Rückgabe entweder so wie in dem Link von Lucky oder falls es global verfügbare Strings sind kannst du sie auch als pChar casten und den Pointer zurückgeben. Mache ich in einer DLL von mir auch und geht so wunderbar auch mit C++ etc.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.