![]() |
record von exe zu dll
Hallo
Ich möchte einen record aus einer exe einer DLL Übergeben. Wie funktioniert dies genau? Habe es so versucht:
Delphi-Quellcode:
Doch ich kann zwischen begin und end; also in der code section
/////////DLL//////////
function hwfunc(PublicVar:record VAR1,VAR2,VAR3:PChar; end):boolean;stdcall; begin end; der funktion NICHT mit PublicVar.VAR1 auf die variablen zugreifen!! |
Re: record von exe zu dll
Ich würde mir eine "Brücken-Unit" bauen, die den Record sowie einen Zeiger darauf definiert und von der Exe und der DLL eingebunden wird. Übergabeparameter ist dann immer der Zeiger.
|
Re: record von exe zu dll
Gibt ja auch keinen anderen Weg oder?
|
Re: record von exe zu dll
Ich wüsste auf die Schnelle keinen "sauberen".
|
Re: record von exe zu dll
Also kann man nicht ohne weiteres records austauschen????
Das mit der brücken unit hört sich nicht schlecht an. Kann ich auch einen fixen zeiger definieren? Weil das prob. ist das die DLL Sprach unabhängig schreibbar sein soll. Also das man auch eine in C++ Entwickeln kann. In C++ gibts doch records oder?? |
Re: record von exe zu dll
|
Re: record von exe zu dll
Bei Records muss man natürlich immer einen eigenen Datentyp deklarieren:
Delphi-Quellcode:
Diese Deklaration kann man in eine eigene Unit auslagern und damit sowohl in der Applikation als auch der DLL mit Uses einbinden.
type
TMeinRecord= record // Deklaration VAR1,VAR2,VAR3:PChar; end function hwfunc(PublicVar:TMeinRecord):boolean;stdcall; |
Re: record von exe zu dll
Ok ich hab das nun so gemacht
DLL Laden:
Delphi-Quellcode:
Function deklariert:
Function Load_DLL (dllfilename,fstring:string;start:boolean):boolean;
begin dllhandle := LoadLibrary(pchar(dllfilename)); if (dllhandle <> 0) and start = true then begin initfunc := GetProcAddress(dllhandle,pchar('initialize')); writeln(string(initfunc.InitLine)); ////////NACH DEM LADEN SOLLTE DER TEXT VON InitLine erscheinen end;
Delphi-Quellcode:
/////DLL////////
type
NewInput = record Description,Tag,func_name,InitLine:PChar end; ... var initfunc:function :NewInput;stdcall; Variablen:
Delphi-Quellcode:
Function
type
NewOutput = record Description,Tag,func_name,InitLine:PChar end;
Delphi-Quellcode:
Nach dem Laden erscheind der Text this module.... auch mit zeilenumbruch
function initialize:NewOutput;stdcall;
begin Result.InitLine := (#13#10) + (' This Module is a test Module '); //Zeilen Umbruch und Init Text Result.Description := pchar('Hello world module'); //Modul Beschreibung Result.Tag:= pchar('blabla'); // Tag Result.func_name := pchar('hwfunc'); // Funktions name innerhalb der DLL end; jedoch gefolgt von einem Fehler
Code:
Zugriffsverletzung bei Adresse 0040514C in modul serv.exe Lesen von Adresse 0009FFFB
|
Re: record von exe zu dll
Hier mal ein Beispiel:
die Brückenunit
Delphi-Quellcode:
Die DLL:
unit UnitBridge;
interface uses Controls; type PMyRec = ^TMyRec; TMyRec = record Username: string[40]; Birthday: TDate; end; implementation end.
Delphi-Quellcode:
Das aufrufende Formular:
library DLLTest;
uses Windows,Messages,UnitBridge; procedure ShowParams(Rec: PMyRec); stdcall; var temp: string; begin temp := Rec^.Username; MessageBox(0,PChar(temp),'Info',MB_OK or MB_ICONINFORMATION); Rec^.Username := 'Die Muhkuh'; //*gg* end; exports ShowParams; begin end.
Delphi-Quellcode:
procedure ShowParams(Rec: PMyRec);stdcall; external 'DLLTest.dll';
procedure TFormTest.Button1Click(Sender: TObject); var Rec: PMyRec; begin New(Rec); FillChar(Rec^,SizeOf(Rec^),0); Rec^.Username := 'DeddyH'; Rec^.Birthday := StrToDate('29.04.1966'); ShowParams(Rec); ShowMessage('Und nun: ' + Rec^.Username); Dispose(Rec); end; |
Re: record von exe zu dll
Man benutzt mich für Schweinereien :shock:
Könnte man den Speicher nicht auch in der DLL reservieren und im Programm freigeben? Ok, ist keine schöne Lösung, ginge mir nur gerade um das Prinzip. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz