Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VB60.dll => Einlesen in Delphi (https://www.delphipraxis.net/2221-vb60-dll-%3D-einlesen-delphi.html)

uka 13. Jan 2003 12:13


VB60.dll => Einlesen in Delphi
 
Hallo,
brauch mal dringend Eure Hilfe.
Ein Hersteller, dessen Namen ich nicht gerade nennen möchte :spin: , liefert uns eine ActiveX-DLL die er in VB6.0 geschrieben hat. Wir sind mit unserem Produckt dringend auf diese Daten angewiesen und möchten mit unserer Delphi3.0 Applikation drauf zu greifen.

Bislang habe ich gehofft über folgenden Code:
==================================================
function ErmittleGUX:integer;
safecall external 'D:\gox57\GUX_VB.dll' name 'ErmittleGUX()';

procedure TForm1.Button1Click(Sender: TObject);
var
t:integer;
begin
t:=ErmittleGUX;
edit1.text:= inttostr(t)

end;
============================================
Statt safecall habe ich auch schon stdcall versucht, jedoch ohne Erfolg.
Statt dessen kommt immmer Prozedureeinsprung wurde nicht gefunden zurück?
=========================================
VB-seitig soll die DLL wohl so aussehen:

Public Function ErmittleGUX() As Integer
ErmittleGUX=[Zahlenwert]
end Function
Diese Funktion ist Bestandteil einer Klasse cls_TX.

Wer kann mir hier helfen, das wir irgendwie diese Funktion aufrufen können und die Wert für unser Delphi Programm bekommen.

Christian Seehase 13. Jan 2003 12:22

Moin uka,

erst einmal herzlich willkommen.

Probier's doch mal so:

Delphi-Quellcode:
function ErmittleGUX:integer; stdcall; external 'D:\gox57\GUX_VB.dll' name 'ErmittleGUX';
als Name muss immer der Name angegeben werden, unter dem die Funktion exportiert wird (falls sie unter einem Namen exportiert wird).
Dabei muss die Gross-/Kleinschreibung exakt eingehalten werden.
Die Klammern sagen ja nur aus, dass die Funktion keine Parameter erfordert, und haben im Funktionsnamen nichts zu suchen.

Ist der eigene Funktionsname genauso geschrieben, wie der exportierte Name, kann man auf die Angabe von name verzichten.

uka 13. Jan 2003 12:44

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Chris,
danke erstmal für die schnelle Antwort. Habs auch gleich versucht mit allen Varianten.Aber es bleibt erfolglos. Das liegt bestimmt daran, das VB keine so richtigen DLL's erstellt. Jedenfalls findet Delphi die einsprungmarke nicht. Registiert ist die DLL zwar und unter Word(VBA) kann man damit auch arbeiten, ab Delphi nicht.
Wir haben vom Hersteller eine Testdll bekommen, wenn du willst kannst sie bekommen.
Gruß Udo

clsT5.Gibwert =>Rückgabewert Integer

Luckie 13. Jan 2003 13:01

Welche Funktion soll die Test5.dll exportieren?
Ich sehe hier im Dependency Walker nur:
- DllCanUnloadNow
- DllGetClassObject
- DllRegisterServer
- DllUnregisterServer

Christian Seehase 13. Jan 2003 13:07

Moin Udo,

ich hab' mir das alles nochmal durchgelesen.

Wenn ich mich nicht sehr irre handelt es sich ja nicht um eine Funktion, sondern um eine Methode.

Soweit ich weiss können Klassen aber in Delphi nicht importiert werden.

[EDIT]
Wenn die DLL über Register/UnregisterServer verfügt, dann kann könnte es ja durchaus sein, dass sie COM Objekte zur Verfügung stellt.
Registrieren der DLL mit Regsvr32 <DLLNAME>, deregistrieren mit Regsvr32 /u <DLLNAME>.
Jetzt könnte es möglich sein, über Komponente\ActviX die Typelibrary als Unit zu importieren (und somit zu nutzen)
[/EDIT]

uka 13. Jan 2003 13:56

Hallo Chris :angle: , hallo Luckie :angle: ,
erstmal danke für eure Hilfe.
Ich habe erstmal die erstellte DLL registriert. => Das war erfolgreich.
Beim Einlesen über Komponeten/ActiveX fand ich die DLL nicht. Ich glaub da kann man nur auf ocx zugreifen und das ist die dll ja nicht. Richtig ist, das die DLL eine Klasse(clsT5) hat mit der einen Methode "Gibwert". Allerdings das Zugreifen bleibt das Problem.

[Luckie]
Was ist das für ein Programm, Dependency Walker ?
Ich kenne das nicht. Kann man damit DLL's auslesen? Vielleicht gibt es damit eine Lösung. DLLGETClassObject klingt zwar sehr nach MS, könnte mit aber vielleicht helfen. Ein Programm, mit dem man die DLL-Schnittstellen auslesen kann und die Deklarationen vorschlägt wäre optimal.

Langsam glaub ich, das es nicht möglich ist, von Delphi 3 auf VB6 zuzugreifen. :cry:

Danke und Gruß Udo

Udontknow 13. Jan 2003 13:58

Zitat:

Wenn die DLL über Register/UnregisterServer verfügt, dann kann könnte es ja durchaus sein, dass sie COM Objekte zur Verfügung stellt.
Das ist anzunehmen, wenn es sich um eine Active-X-DLL (siehe erstes Posting) handelt... :wink:

Dementsprechend kann man dann nach der Registrierung per regsvr32 über "Komponente\ActiveX importieren" die Interfaces bzw. Klassen importieren und benutzen.

Cu,
Udontknow

sakura 13. Jan 2003 14:06

Zitat:

Zitat von uka
Beim Einlesen über Komponeten/ActiveX fand ich die DLL nicht. Ich glaub da kann man nur auf ocx zugreifen und das ist die dll ja nicht.

OCX Dateien sind auch nur DLLs mit einer anderen Endung. Wenn Du Dein ActiveX nicht in der Liste findest, einfach mal auf den Browse/Durchsuchen Button unterhalb der Liste der installierten ActiveX klicken, Deine registrierte DLL auswählen und anschliessend sollte der Import auch funktionieren. So mache ich das mit anderen Dateitypen (zb. CA4), welche auf ActiveX Basis arbeiten.
...:cat:...

uka 13. Jan 2003 14:45

Hallo Sakura,
danke für den Tip, ich hatte schon versucht über den Menüpunkt (Hinzufügen) die DLL in die Liste zu bekommen. Ich weiß auch, dass man nicht nur ocx, sondern auch dll registrieren kann. Fakt ist, diese geht halt nicht, warum weiß ich nicht? Du hast dir ja mal die DLL herunterladen und versuchen sie unter einer anderen Delphiversion zu registrieren, dann habe ich zumindest eine Aussage, dass es nur an der Version liegt.
Gruß Udo

sakura 13. Jan 2003 14:57

Liste der Anhänge anzeigen (Anzahl: 1)
Vielleicht hilft es Dir ja, anbei ist der Source des Imports.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Seite 1 von 2  1 2      

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