![]() |
Virtual Basic Dll in Delphi aufrufen?
Hi,
ich möchte in Delphi eine in VB geschriebene Dll aufrufen, welche ich so mache:
Delphi-Quellcode:
So siehtz jetzt nur testweise die VB Dll aus:
function TForm1.LoadDll(Name:PChar;Plugin:String):PChar;
type TDLLFunc = procedure; var DLLHandle:THandle; Ret:PChar; func:TDllFunc; begin Ret := ''; DLLHandle:=LoadLibrary(PChar(ExtractFilePath(paramstr(0))+Plugin+'.dll')); if DLLHandle >= 32 then begin @func := GetProcAddress(DLLHandle,Name); if Assigned (func) then func; end; result:=Ret; end;
Delphi-Quellcode:
Was ist der Fehler?
Public Function start()
MsgBox "dll" End Function * Public Sub start2() MsgBox "dll" End Sub Ich vermute den Fehler im VB-Code da ich Delphi Dll´s damit ohne Probleme laden kann! Vlt kennt sich ja wer nen bissel mit VB aus und kann mir dabei helfen. |
Re: Virtual Basic Dll in Delphi aufrufen?
Zitat:
|
Re: Virtual Basic Dll in Delphi aufrufen?
die funktion der VB Dll wird nicht geladen/ausgeführt
ups^^ hatte ich vergessen zu sagen |
Re: Virtual Basic Dll in Delphi aufrufen?
Schau doch mal
![]() |
Re: Virtual Basic Dll in Delphi aufrufen?
so die dll is jetzt verändert:
Delphi-Quellcode:
aber läuft immer noch nicht mit folgender Funktion:
Public Function start() As String
MsgBox "dll" start = "moin" End Function * Public Sub start2() MsgBox "pdll" End Sub * Function DLLMain(ByVal a As Long, ByVal b As Long, ByVal c As Long) As Long *** DLLMain = 1 End Function * Sub Main() *** ' Dummy End Sub Und die Export.def: LIBARY Project1 EXPORTS *start *start2
Delphi-Quellcode:
TDLLFunc = function:pchar; läuft auch nicht.
function TForm1.GetPluginInfo (Name : PChar; Plugin : String) : PChar;
type TDLLFunc = function:String; var DLLHandle:THandle; Ret:PChar; func:TDllFunc; begin Ret := ''; DLLHandle:=LoadLibrary(PChar(ExtractFilePath(paramstr(0))+Plugin+'.dll')); if DLLHandle >= 32 then begin @func := GetProcAddress(DLLHandle,Name); if Assigned (func) then// hier assigned(func)=false Ret:=pchar(func); end; result:=Ret; end; procedure TForm1.Button1Click(Sender: TObject); begin showmessage(GetPluginInfo('start','a')); end; |
Re: Virtual Basic Dll in Delphi aufrufen?
Hast du die Funktionen die du benutzen möchtest auch exportiert?
|
Re: Virtual Basic Dll in Delphi aufrufen?
angeblich hat er das gemacht:
Export.def: LIBARY Project1 EXPORTS start start2 hatte gerade noch meinen oberen beitrag editiert |
Re: Virtual Basic Dll in Delphi aufrufen?
Hast du das auch mal Schritt für Schritt über den Debugger analysiert? Welchen Wert hat DLLHandle? Und wo kommt da die 32 her? Sobald DLLHandle <> 0 ist, ist die Dll geladen.
|
Re: Virtual Basic Dll in Delphi aufrufen?
DLLHandle=285212672 den wert 32 hatte ich hier im Forum gefunden.
Ich bin mir ja fast sicher das es an der VB Dll liegt. Wärst du vlt so nett und würdest mir eine test Dll mit Source uppen? |
Re: Virtual Basic Dll in Delphi aufrufen?
Mein angegebener Link enthält doch ein
![]() |
Re: Virtual Basic Dll in Delphi aufrufen?
Liste der Anhänge anzeigen (Anzahl: 1)
soo etwas zeit ist verstrichen und das Problem ist immer noch da... ich hab genau das Beispiel genommen und bekomme mit folgenden Code immer noch nix bei raus...
Delphi-Quellcode:
im anhang nochmal die Dll ich kann mir das nicht erklären warum das nicht geht!!!
function TForm1.GetPluginInfo (Name : PChar; Plugin : String) : integer;
type TDLLFunc = function(a,b:double):double; var DLLHandle:THandle; Ret:double; func:TDllFunc; begin Ret:=0; DLLHandle:=LoadLibrary(PChar(ExtractFilePath(paramstr(0))+Plugin+'.dll')); if DLLHandle >= 32 then begin @func := GetProcAddress(DLLHandle,Name); if Assigned (func) then//Assigned (func)=false Ret:=((func(4,7))); end; result:=round(Ret); end; |
Re: Virtual Basic Dll in Delphi aufrufen?
Schon mal eine andere dll probiert?
Deine funktioniert jedenfalls nicht. |
Re: Virtual Basic Dll in Delphi aufrufen?
In Delphi erstellte DLL´s sind absolut kein Problem.... aber in VB...
Und nocheinmal was ich gemacht habe: 1. Ich habe VB 6 2. ich habe sowohl den Controller als auch die DLL aus genau ![]() 3. Ich Compiliere die beiden Projekte 4. Ich starte den Linker.exe und gebe in das Editfeld den Pfard der Export.def ein (die DLL liegt im selben Verzeichnis) 5. Drücke den Button 6. jetzt müsste die Dll ja egl funktionieren aber sie tut es nicht!!! Könnte iwer eine funktionierende DLL hochladen, damit ich Delphi als Fehlerqualle ausschliesen kann? |
Re: Virtual Basic Dll in Delphi aufrufen?
ich nehme mal an du meinst Visual Basic oder? :gruebel:
|
Re: Virtual Basic Dll in Delphi aufrufen?
Wird die Funktion immer noch nicht geladen? Was sagt denn
![]() ![]() 1. Du gibst keine Aufrufkonvention an und 2. die Funktion in der DLL gibt einen String zurück. |
Re: Virtual Basic Dll in Delphi aufrufen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Die messagen würde ich grundsätzlich nicht als string zurückgeben das gibt ärger. Wenn schon dann als Long oder Variant. Warum das bei dir nicht geht ist einfach. Du rufst eine MessageBox mit einem Pointer auf und erwartest gleichzeitig eine rückgabe obwohl die Box noch nicht geschlossen wurde. VB ist nicht multitask fähig so das du beides in einen schub abholen könntest.
Delphi-Quellcode:
Public Function start() As Variant
start = MsgBox("dll") start = "Was ist das" End Function Public Sub start2() MsgBox "pdll" End Sub Function DLLMain(ByVal a As Long, ByVal b As Long, ByVal c As Long) As Long DLLMain = 1 End Function Sub Main() ' Dummy End Sub
Delphi-Quellcode:
Test DLL und Test Programm...
Private Declare Function start Lib "TestDLL.DLL" () As Variant
Private Declare Sub start2 Lib "TestDLL.DLL" () Private Sub cmdExit_Click() End End Sub Private Sub Form_Load() lblResult(1).Caption = start start2 End Sub Anmerkung! Fehler die auftreten könnenFehlermeldungen beim Versuch, innerhalb der exportierten Funktionen Instanzen von Klassen zu erstellen Probleme bei Funktionen, die als Parameter einen String erwarten oder diesen zurück geben (benutzen Sie statt dessen den Datentyp Variant) Bei VB6 werden die Bibliotheken teilweise nicht gefunden (fügen Sie die Declare-Statements in ein Modul ein) Anbei ein Example damit du siehst das es funktioniert. gruss Emil |
Re: Virtual Basic Dll in Delphi aufrufen?
SOOO ein Fortschritt!
Das erste mal wurde die Funktion geladen! dieses führt zwar in eine Fehlermeldung, was aber nicht mein jetziges Problem ist! Zitat:
Die Funktion wird dann wiederum in Delphi nicht geladen! Zitat:
Würdest du mir das mal bitte erklären wo ich was hinzufügen muss? |
Re: Virtual Basic Dll in Delphi aufrufen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
So kann die DLL nie funktionieren. 1. Die Originale Link.exe im pfad (VB98) nach Link1 umbenennen. 2. Das Archiv entpacken was ich angehängt habe. 3. Die Link.exe nach VB98 kopieren und die beigelegt DLL mit regserv32 Registrieren 4. VB6 starten und im Menü unter ADD-Ins/Add-Ins Manager den eintrag "Make DLL's in Visual Basic" auswählen. dann die checkboxen "beim start laden" und "laden/Entladen" aktivieren. 5. Wenn du nun in VB6 die DLL Kompilierst geht ein Fenster auf mit der aufforderung ob du eine DLL erstellen willst. Mit JA beantworten und dann die TestDLL.def auswählen. Danach wird die DLL erstellt und sollte funktionieren. Bedenke wenn du in der Environment bist mußt du die erstellte DLL im VB98 Pfad kopieren sonst wird sie nicht gefunden. Als eigenständige Echsen reicht es wenn sie im APP Pfad liegt Zitat:
Dein Problem ist die richtigen Variablen zu finden die mit VB/Delphi zusammen arbeiten.. StrPtr, VarPtr, Variant.. oder was es sonst noch gibt. gruss Emil |
Re: Virtual Basic Dll in Delphi aufrufen?
DANKE!!! für die ausführliche und wirklich gute Erklärung!!!
|
Re: Virtual Basic Dll in Delphi aufrufen?
Zitat:
gruss Emil |
Re: Virtual Basic Dll in Delphi aufrufen?
Leider ist doch noch nicht alles erledigt...
blos jetzt bekomme ich immer noch den selben Fehler: Zitat:
muss ich vorher vlt. noch VB Dlls laden? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz