Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variable in DLL setzen (https://www.delphipraxis.net/112484-variable-dll-setzen.html)

DelphiManiac 22. Apr 2008 09:50


Variable in DLL setzen
 
Hallo ich habe folgendes Problem.

Ich habe eine DLL geschrieben, in der DLL habe ich eine Funktion zum setzen einer Adresse.
Es gibt die Funktionen:

Delphi-Quellcode:
procedure Set_RS485ProtocolAdress(DataPointer:Byte); stdcall;
begin
  aUSS01Obj.RS485:=DataPointer;
end;

procedure Get_RS485ProtocolAdress(DataPointer:PByte); stdcall;
begin
  DataPointer^:= aUSS01Obj.RS485;
end;
In der DLL lege ich ein Objekt an (aObj), welches einen private Variable FRS4885Adresse besitzt
Delphi-Quellcode:
    property RS485:Byte
      read FRS485Adresse write setRS485;
Nun soll über Visual Basic 6 diese Adresse geändert werden über Set_RS485ProtocolAdress.

Dies klappt auch in VB.NET und in meinem Delphi Prog, aber in VB 6 scheint es nicht zu funktionieren,
habt ihr da eine Ahnung (vielleicht irgendein Problem mit dem Speichermanagement...)?

Vielen Dank!

SirThornberry 22. Apr 2008 09:55

Re: Variable in DLL setzen
 
was heißt "scheint nicht zu funktionieren"? hast du in die dll mal debugausgaben gemacht bzw. die DLL einfach im Debugger laufen lassen? Dann siehst du was für Werte rein gegeben werden etc.
Und wie rufst du das ganze auf? Vielleicht ist die Art des Aufrufs einfach fehlerhaft.

DelphiManiac 22. Apr 2008 10:04

Re: Variable in DLL setzen
 
Hallo,

also die Funktion wird vom Kunden aufgerufen...

und zwar so:

Delphi-Quellcode:
Attribute VB_Name = "Module1"
Public Zeit As Single
Public Startzeit As Single
Public Einheit As String
Public Echo As String
Public Druckrate As Single
Public GPC_SOLL As String
Public TPK_SOLL As String
Public ALM_CMD As String
Public Kanal As Integer
Public Result As Integer
Public Adresse As Byte
Public ADR As Byte
Public IST_TEMP_ALM As Single
Public IST_TEMP_TPK As Single
Public SOLL_TEMP_TPK As Single
Public IST_DRUCK_GPC As Single
Public ZUL_TEMP_DIFF As Single
'Public Zeit(20) As Single
Public W_Zeit As Single
Public Temp_Tol As Single
Public Seriennummer As String
Public Schritt As Integer



Option Explicit
Public Declare Sub Set_RS485ProtocolAdress Lib "USS01DLL.dll" (BVal a As Byte)
Public Declare Sub Get_RS485ProtocolAdress Lib "USS01DLL.dll" (ByRef a As Byte)
Public Declare Function Get_Seriennummer Lib "USS01DLL.dll" (ByRef a As String) As Integer
Public Declare Function Connect Lib "USS01DLL.dll" () As Integer
Public Declare Function DisConnect Lib "USS01DLL.dll" () As Integer
Wie kann man denn eine Aufrufkonvention festlegen?!

DelphiManiac 22. Apr 2008 10:20

Re: Variable in DLL setzen
 
Gibt es denn Probleme, wenn man ein Objekt anlegt in einer DLL und dann über Property die Werte ändert??

sirius 22. Apr 2008 10:23

Re: Variable in DLL setzen
 
Zitat:

Zitat von DelphiManiac
Gibt es denn Probleme, wenn man ein Objekt anlegt in einer DLL und dann über Property die Werte ändert??

Nö, solange es 32bit-Werte sind (du könntest ja mal probehalber von Byte auf DWORD wechseln) und du nicht den Instanzzeiger hin und her übergibst.

DelphiManiac 22. Apr 2008 10:26

Re: Variable in DLL setzen
 
Ich verstehe das Problem zur Zeit auch nicht, da es bei meinen Testprogrammen funktioniert??!

DelphiManiac 22. Apr 2008 12:20

Re: Variable in DLL setzen
 
So ich habe nun meine DLL mal ein Logfile erstellen lassen.

Es sieht so aus, dass über Set_RS485Protocolladress 48 (dezimal) übergeben wird und in der DLL 72 dezimal ankommt :shock:

Wie kann das sein, was macht Visual Basic 6 dort an der Stelle??

Der Kunde ruft folgende Sub auf:
Delphi-Quellcode:
// VB AAAARGH....
Private Sub Command1_Click()
    ADR = Text1.Text
    Result = Set_RS485ProtocolAdress(ADR)
End Sub
Wird hier eventuell eine Typkonvertierung durchgeführt???


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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