AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

record von exe zu dll

Ein Thema von hedie · begonnen am 22. Apr 2008 · letzter Beitrag vom 22. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

record von exe zu dll

  Alt 22. Apr 2008, 19:14
Hallo

Ich möchte einen record aus einer exe einer
DLL Übergeben.

Wie funktioniert dies genau?

Habe es so versucht:

Delphi-Quellcode:
/////////DLL//////////
function hwfunc(PublicVar:record VAR1,VAR2,VAR3:PChar; end):boolean;stdcall;
begin

end;
Doch ich kann zwischen begin und end; also in der code section
der funktion NICHT mit PublicVar.VAR1 auf die variablen zugreifen!!
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:20
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:21
Gibt ja auch keinen anderen Weg oder?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:21
Ich wüsste auf die Schnelle keinen "sauberen".
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#5

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:27
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??
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:28
Ja gibt es.

Falls Du noch nicht mit DLLs gearbeitet hast, ist hier ein kleines Tutorial für Dich.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:30
Bei Records muss man natürlich immer einen eigenen Datentyp deklarieren:
Delphi-Quellcode:
type
  TMeinRecord= record // Deklaration
    VAR1,VAR2,VAR3:PChar;
  end
function hwfunc(PublicVar:TMeinRecord):boolean;stdcall;
Diese Deklaration kann man in eine eigene Unit auslagern und damit sowohl in der Applikation als auch der DLL mit Uses einbinden.
Andreas
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#8

Re: record von exe zu dll

  Alt 22. Apr 2008, 19:48
Ok ich hab das nun so gemacht

DLL Laden:

Delphi-Quellcode:
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;
Function deklariert:

Delphi-Quellcode:
type
  NewInput = record
    Description,Tag,func_name,InitLine:PChar
  end;
...

var
initfunc:function :NewInput;stdcall;
/////DLL////////

Variablen:

Delphi-Quellcode:
type
  NewOutput = record
    Description,Tag,func_name,InitLine:PChar
  end;
Function

Delphi-Quellcode:
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;
Nach dem Laden erscheind der Text this module.... auch mit zeilenumbruch
jedoch gefolgt von einem Fehler

Code:
Zugriffsverletzung bei Adresse 0040514C in modul serv.exe Lesen von Adresse 0009FFFB
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#9

Re: record von exe zu dll

  Alt 22. Apr 2008, 20:27
Hier mal ein Beispiel:

die Brückenunit
Delphi-Quellcode:
unit UnitBridge;

interface

uses Controls;

type
  PMyRec = ^TMyRec;
  TMyRec = record
    Username: string[40];
    Birthday: TDate;
  end;

implementation

end.
Die DLL:
Delphi-Quellcode:
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.
Das aufrufende Formular:
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: record von exe zu dll

  Alt 22. Apr 2008, 20:30
Man benutzt mich für Schweinereien

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz