Autor Beitrag
Hoda
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 14.01.03 15:02 
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
ausblenden volle Höhe 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:
ausblenden Quelltext
1:
2:
3:
Public Sub gibHallo()
MsgBox "Hallo"
End Sub


So gesehen recht simple aber ... :autsch:
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Di 14.01.03 15:47 
Hi,

Du mußt deine DLL ja in Deinem DELPHI Projekt aufrufen mit dem Befehl im Interface-Teil

ausblenden Quelltext
1:
function funktion1(übergabewert1 : PChar): PChar; stdcall;					


Und dann mit folgendem Befehl im Implementations-Teil
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: 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:
www.entwickler-forum...0ka80UkPu.0@.ee8dda0

Gruß
hoda