AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Virtual Basic Dll in Delphi aufrufen?
Thema durchsuchen
Ansicht
Themen-Optionen

Virtual Basic Dll in Delphi aufrufen?

Ein Thema von gandime · begonnen am 31. Jan 2009 · letzter Beitrag vom 28. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
gandime
(Gast)

n/a Beiträge
 
#11

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 25. Mär 2009, 19:02
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!!!
Angehängte Dateien
Dateityp: dll vb_759.dll (16,0 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#12

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 12:48
Schon mal eine andere dll probiert?
Deine funktioniert jedenfalls nicht.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#13

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 15:04
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?
  Mit Zitat antworten Zitat
craash

Registriert seit: 23. Nov 2008
Ort: Mühlacker
79 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 15:10
ich nehme mal an du meinst Visual Basic oder?
uses Delphi 5 Std. / TurboDelphi 2006
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 15:13
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 16:27
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
Angehängte Dateien
Dateityp: zip sample_195.zip (8,9 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#17

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 18:28
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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 19:56
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
Angehängte Dateien
Dateityp: zip link_174.zip (12,9 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#19

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 20:29
DANKE!!! für die ausführliche und wirklich gute Erklärung!!!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Virtual Basic Dll in Delphi aufrufen?

  Alt 27. Mär 2009, 20:33
Zitat von gandime:
DANKE!!! für die ausführliche und wirklich gute Erklärung!!!
gern geschehen ..

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
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