AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mehrere Werte aus DLL zurückggeben

Ein Thema von DelphiManiac · begonnen am 27. Mai 2008 · letzter Beitrag vom 27. Mai 2008
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 11:13
Hallo,

ich habe eine DLL geschrieben, die verschiedenenste Kommunikation zu einem Gerät kapselt.
Nun habe ich einen BUS (RS485) an dem mehrere Geräte hängen können.

Ich habe jetzt eine Funktion, die alle Adressen abscannt und auf eine Anwort wartet. Diese merke ich mir dann und
will diese nun zurückgeben, an den DLL-Aufrufer.

Nur wie bewerkstellige ich die Übergabe, intern in der DLL habe ich ein Array,
eines Records, der sieht dann ungefähr so aus:

TDeviceRecord = record
Adresse:Word; // Die RS485 Adress auf die er geantwortet hat
Seriennummer:String; // Die Seriennummer im Gerät
end;

Viele Dank!
Gruß
DelphiManiac
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:00
Schonmal über VAR-Parameter versucht?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:04
Hallo,

da es mehrere Adressen sein können,
würde ich 2 Funktionen/Prozeduren nehmen.

Die 1. fragt die Anzahl der Adressen ab,
function GetAddressNumbers: Word;

die 2. rufst du so oft auf, wie Anzahl vorher zurückgegeben wurde
function GetAddressData(AdressCount: Word): ShortString;

Beachte das ShortString statt String, um borlandmm nicht benutzen zu müssen.


Heiko
Heiko
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:08
übergebe in der Funktion einen Zeiger auf das Array und einen zusätzlichen Parameter für die Länge oder Anzahl. Dann kann der Aufrufer der Funktion ein dynamisches Array draus machen und die übergebene Anzahl an records auslesen. Schau aber auch noch mal auf die Speicherverwaltung!! Nicht dass da Leichen übrigbleiben oder sonst was in die Hose geht.
Ich habs auch schon mal so gelöst, dass ich im Aufruferprogramm eine Liste übergeben hab, die die DLL-Funktion mit Werten füllt. So habe ich die Initialisierung und Freigabe im Hauptprogramm.

Gruß oki
42
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#5

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:09
Mir geht es eigentlich darum.

Angenommen ich habe folgende Geräte angeschlossen:

1,2,3,5,10,22

Dann muss ich die Geräteadressen zurückgeben.

Kann ich das so machen?

function ScanAllDevices(DatenPointer:Pointer):Integer;stdcall; Und der Pointer zeigt auf ein Record?

Oder ist das eine schlechte Möglichkeit?
Danke!
Gruß
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:11
Wenn du als Rückgabewert die Länge des Records übergibst, dann sollte es klappen.

Gruß oki
42
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#7

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 13:48
@Oki,

genau so habe ich es jetzt gemacht, die Anzahl der Array Elementeübergebe ich und den Zeiger auf Record-Array,
so kann der DLL-Aufrufer dann das Array durchlaufen und sich die Werte abholen.

Danke!
Gruß
DelphiManiac
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 14:08
Anstatt eines untypisierten Pointer könntest du natürlich auch so etwas wie PDeviceRecord nehmen. Das vereinfacht das Handling ein wenig.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Mehrere Werte aus DLL zurückggeben

  Alt 27. Mai 2008, 14:34
so wie sirius es empfiehlt mach ich es auch immer. Läßt sich im Code einfach besser lesen und sicherer handeln. Pass aber blos auf, dass du den Speicher für deinen Zeiger wieder ordentlich frei gibst, sonnst ist dein Rechner bald OutofMemory!

Gruß oki
42
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:34 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