Entwickler-Ecke
Dateizugriff - Habe Problem bei exteren DLL lesen?
Hoda - Di 14.01.03 15:02
Titel: Habe Problem bei exteren DLL lesen?
Hallo Leute,
ich versuche eine DLL die in VB (fragt bitte nicht Warum in VB) geschrieben ist, ins Delphi einzulesen. Ich habe mir den Programmcode aus einer Tutorial kopiert und etwas angepasst.
Die VB DLL (Project1.dll) habe ich geschrieben.
Nur leider wird die Procedure "gibHallo" nicht aufgerufen? :nixweiss:
Könnt ihr mir weiter helfen :P
Code in Delphi
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,QTypes;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TtestProc = Procedure; var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Handle : THandle; TestProc : TtestProc; begin Handle := LoadLibrary('C:\Project1.dll'); if Handle <> 0 then begin @TestProc := GetProcAddress(Handle,'gibHallo'); if @TestProc <> nil then begin TestProc; end; FreeLibrary(Handle); end;
end;
end. |
Und der Code unter VB ist:
Quelltext
1: 2: 3:
| Public Sub gibHallo() MsgBox "Hallo" End Sub |
So gesehen recht simple aber ... :autsch:
bis11 - Di 14.01.03 15:47
Hi,
Du mußt deine DLL ja in Deinem DELPHI Projekt aufrufen mit dem Befehl im Interface-Teil
Quelltext
1:
| function funktion1(übergabewert1 : PChar): PChar; stdcall; |
Und dann mit folgendem Befehl im Implementations-Teil
Quelltext
1:
| function funktion1(Table : PChar) : PChar ; stdcall; external 'test.dll'; |
Entweder schreibst Du die Befehle mit in Dein Projekt oder Du legst Dir eine extra Unit an, die Du dann mit in Dein Projekt einfügst.
Hoda - Di 14.01.03 17:35
Hi bis11,
sorry aber ich habe nicht so richtig verstanden was du meinst. :wink:
Das liegt bestimmt daran, dass ich nicht so Fit in Delphi bin.
Ich will doch die DLL zur Laufzeit in das Programm einfügen!
Ich habe etwas entdeckt (Hurra Hurra) :party: :dance: . Unter dem Menü Projekt gibt es „Typenbibliothek importieren“, die ich aufgerufen habe. Nach dem ich die DLL ausgewählt habe wurde neben meinem Programm die DLL als Unit eingefügt. Ich kann auch die Procedure „gibHallo“ sehen.
Nach dem ich die Unit unter uses eingebunden habe und den Programm starte bekomme ich eine Exception als Fehlermeldung ?!?
Es muss doch eine Möglichkeit geben diese externe VB-DLL in mein Programm einzubinden.
:bawling:
Gruß + Danke
Hoda - Di 28.01.03 12:04
Hallo Leute!
Auf die Frage „Wie kann ich eine in VB geschrieben DLL ins Delphi einbinden?“ hier die Antwort:
| Zitat: |
Andreas Kosch.
Visual Basic konnte am Anfang überhaupt keine DLLs generieren. Ab der Version 3 (oder 4) hat Microsoft die Fähigkeit nachgerüstet, dass VB ein COM-Objekt als DLL verpacken kann. Das ist aber keine DLL im Sinne des API (daher schlägt der LoadLibrary/GetProcAddress-Weg auch fehl), sondern ein In-Process-Server, der nur auf dem Automation-Weg (COM-Weg) genutzt werden kann. Das eigene Delphi-Programm muss daher auf dem COM-Weg auf diesen in Form einer DLL vorliegenden In-Process-Server zugreifen.
Das ist keine exportierte Schnittstellenroutine der DLL, sondern "nur" eine Interface-Methode der COM-Schnittstelle des In-Process-Servers.
Erst mit VB.NET entfällt diese Beschränkung, da VB.NET gegenüber C#, C++ und Delphi for .NET technisch gleichwertig ist.
|
Nach dem ich das gelesen habe gingen bei mir einige :think: :idea: :think: :idea: :think: (Lichter) an.
Falls Ihr die Lösung sehen wollt hier der Link:
http://www.entwickler-forum.de/webx?50@115.AA0ka80UkPu.0@.ee8dda0
Gruß
hoda
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!