Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Virtual Basic Dll in Delphi aufrufen? (https://www.delphipraxis.net/128529-virtual-basic-dll-delphi-aufrufen.html)

gandime 25. Mär 2009 18:02

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:
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;
im anhang nochmal die Dll ich kann mir das nicht erklären warum das nicht geht!!!

Udo 27. Mär 2009 11:48

Re: Virtual Basic Dll in Delphi aufrufen?
 
Schon mal eine andere dll probiert?
Deine funktioniert jedenfalls nicht.

gandime 27. Mär 2009 14:04

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 diesem Beispiel ohne etwas zu ändern!
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?

craash 27. Mär 2009 14:10

Re: Virtual Basic Dll in Delphi aufrufen?
 
ich nehme mal an du meinst Visual Basic oder? :gruebel:

Luckie 27. Mär 2009 14:13

Re: Virtual Basic Dll in Delphi aufrufen?
 
Wird die Funktion immer noch nicht geladen? Was sagt denn MSDN-Library durchsuchenGetLastError, wenn MSDN-Library durchsuchenGetProcAddress 0 liefert? ansonsten sind mir zwei Sachen aufgefallen:
1. Du gibst keine Aufrufkonvention an und
2. die Funktion in der DLL gibt einen String zurück.

EWeiss 27. Mär 2009 15:27

Re: Virtual Basic Dll in Delphi aufrufen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

6. jetzt müsste die Dll ja egl funktionieren aber sie tut es nicht!!!
Sie tut es doch..
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:
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
Test DLL und Test Programm...

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

gandime 27. Mär 2009 17:28

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:

Erste Gelegenheit für Exception bei $76D342EB. Exception-Klasse EAccessViolation mit Meldung 'Access violation at address 660D8F5E in module 'MSVBVM60.DLL'. Read of address 00000076'. Prozess Project1.exe (2992)
Mein Problem besteht darin, das wenn ich deinen Source nocheinmal mit meinem Virtual Basic 6 compiliere funktioniert die DLL nicht mehr.
Die Funktion wird dann wiederum in Delphi nicht geladen!

Zitat:

(fügen Sie die Declare-Statements in ein Modul ein)
Liegt es vlt daran? da ich nicht weiss was du damit meinst!
Würdest du mir das mal bitte erklären wo ich was hinzufügen muss?

EWeiss 27. Mär 2009 18:56

Re: Virtual Basic Dll in Delphi aufrufen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

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!!!
Das ist schon mal verkehrt!
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:

(fügen Sie die Declare-Statements in ein Modul ein)
Die sind in einem Modul eingefügt (Modul = *.bas)
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

gandime 27. Mär 2009 19:29

Re: Virtual Basic Dll in Delphi aufrufen?
 
DANKE!!! für die ausführliche und wirklich gute Erklärung!!!

EWeiss 27. Mär 2009 19:33

Re: Virtual Basic Dll in Delphi aufrufen?
 
Zitat:

Zitat von gandime
DANKE!!! für die ausführliche und wirklich gute Erklärung!!!

gern geschehen ..

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Seite 2 von 3     12 3      

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