Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Standard DLL in VB geschrieben (https://www.delphipraxis.net/121065-standard-dll-vbulletin-geschrieben.html)

EWeiss 21. Sep 2008 20:20


Standard DLL in VB geschrieben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Für die ganz schlauen hier die meinen das es nicht geht.. @Elvis ;)
Lebst vielleicht doch hinterm Mond ? hihiiihi nur Spass

"DLL"
Delphi-Quellcode:
Function DLLMain(ByVal A As Long, ByVal B As Long, ByVal c As Long) As Long
    DLLMain = 1
End Function

Sub Main()
    //This is a dummy, so the IDE doesn't complain
    //there is no Sub Main.
End Sub

//add more functions here, ie.
Function addition(ByVal A As Double, ByVal B As Double) As Double
  addition = A + B
End Function

Function subtraction(ByVal A As Double, ByVal B As Double) As Double
  subtraction = A - B
End Function

Function showmsg() As String
Dim sInput    As Long
Dim intMin    As Integer
Dim intSec    As Integer
Dim TimeString As String

    sInput = InputBox("Bitte Zeit in MilliSekunden eingeben", "Result Zeit in Sekunden")
    If sInput > 0 Then
        intMin = sInput \ 60
        intSec = Int(sInput - intMin * 60)
        TimeString = Format$(intMin, "00") & ":" & Format$(intSec, "00")
    End If

    showmsg = TimeString
 
End Function
"Anwendung"
Delphi-Quellcode:
Private Declare Function subtraction Lib "TestDLL.DLL" (ByVal A As Double, ByVal B As Double) As Double
Private Declare Function addition Lib "TestDLL.DLL" (ByVal A As Double, ByVal B As Double) As Double
Private Declare Function showmsg Lib "TestDLL.DLL" () As Long

// Windows API Declaration
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" ( _
    ByVal lpString As Long _
) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal Length As Long _
)

Private Sub btnTime_Click()
    lblTime.Caption = VBStrFromAnsiPtr(showmsg())
End Sub

Private Sub cmdExit_Click()
End
End Sub

Private Sub Form_Load()
lblResult(0) = "9.87 + 2.99 = " & CStr(addition(9.87, 2.99))
lblResult(1) = "10 - 8.43 = " & CStr(subtraction(10, 8.43))
lblResult(2) = "9999 + 1543 = " & CStr(addition(9999, 1543))
End Sub

Private Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
Dim bStr() As Byte
Dim cChars As Long
    On Error Resume Next
    // Get the number of characters in the buffer
    cChars = lstrlen(lpStr)
    // Resize the byte array
    ReDim bStr(0 To cChars - 1) As Byte
    // Grab the ANSI buffer
    Call CopyMemory(bStr(0), ByVal lpStr, cChars)
    // Now convert to a VB Unicode string
    VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
End Function
Test im Anhang ;)

Edit:
hab noch eine Function angehängt

mkinzler 21. Sep 2008 20:27

Re: Standard DLL in VB geschrieben
 
Und funktioniert diese auch in anderen Sprachen?

EWeiss 21. Sep 2008 20:30

Re: Standard DLL in VB geschrieben
 
Zitat:

Zitat von mkinzler
Und funktioniert diese auch in anderen Sprachen?

Versuchs doch einfach
Entry point hast ja ;)

gruss Emil

omata 21. Sep 2008 20:37

Re: Standard DLL in VB geschrieben
 
Vielen Dank das du das Thema hier weiter verfolgst. Hier mal der Urspung.

Aber ich hoffe es geht jetzt hier nicht nur darum, zu zeigen das VB auch das kann was Delphi kann. Mich würde viel mehr interessiere, ob man in beiden Welten auch beides realisieren kann und wie (Aufwand). Bitte keine Kriege ausfechten.
Kann man nicht beides unter einen Hut bringen?

Ich finde das Thema ganz spannend.

Trotzdem die Frage warum darf mein Quellcode nichts von allem wissen und muss es doch benutzen können?

Als Ergänzung zum Urspungsthema und meinem Beispiel dort...
Wenn ich in meiner Klasse, die ich von einem Interface ableite eine zusätzliche Methode realisiere, kennt mein Interface und damit die erstellte Instanz ja diese spezielle Methode nicht. Deshalb muss, wenn ich solche Methode nutzen will, die nicht im Interface veröffentlicht wurden, die abgeleiteten Klassen in der Anwendung, die die zusätzliche Methode benutzen will, doch auch bekannt sein? Gut, hier könnte man natürlich auch noch ein weiteres Interface erstellen, mit dieser Erweiterung, dann müssten die konkreten Klassen nicht bekannt sein. Trotzdem verstehe ich nicht wieso selbst das Interface nicht bekannt sein soll? Das kann ich nicht nachvollziehen.

EWeiss 21. Sep 2008 20:46

Re: Standard DLL in VB geschrieben
 
Zitat:

Wenn ich in meiner Klasse, die ich von einem Interface ableite eine zusätzliche Methode realisiere, kennt mein Interface und damit die erstellte Instanz ja diese spezielle Methode nicht.
Doch du kennst sie.
Mein Beispiel war darauf ausgelegt einen verbindung zwischen zwei Welten herzustellen
Deiner anwendung und Plugins welche von fremden erstellt wurden die du also nicht kennst.

Der Clou ist halt dieser das die IPersonU als Activex als Com opbject ausgelegt werden muss in Delphi.
Somit ist deine Anwendung und die fremd DLL jederzeit in der lage sich zu aktualisieren.

Gehe davon aus das du dann eine Meldung bekommst Interface nicht implementiert.
Wenn an IPersonU irgedetwas geändert wurde.

Also es soll hier niemand mit Vb arbeiten nur am rande.
IPersonU ist also ein Wrapper der sich zwichen deiner anwendung und der DLL setzt
und so dafür sorgt das beide immer über das aktuelle Interface verfügen.


EDIT:
Zitat:

Kann man nicht beides unter einen Hut bringen?
das kannst testen indem du einfach mal versuchst die DLL von VB in Delphi anzusprechen.

gruß Emil

omata 21. Sep 2008 21:13

Re: Standard DLL in VB geschrieben
 
Naja, gerade hier hätte ich mir jetzt mal ein minimales Beispiel in Delphi und VB gewünscht, zur Verdeutlichung.

EWeiss 21. Sep 2008 21:19

Re: Standard DLL in VB geschrieben
 
Zitat:

Zitat von omata
Naja, gerade hier hätte ich mir jetzt mal ein minimales Beispiel in Delphi und VB gewünscht, zur Verdeutlichung.

Was möchtes du haben du meinst ich soll für die funktionen eine Test Anwendung schreiben
damit du sehen kannst das es funktioniert ?

Verstehe ich jetzt nicht ganz sorry

gruss Emil

omata 21. Sep 2008 21:35

Re: Standard DLL in VB geschrieben
 
Weiss ich auch nicht, was ich haben möchte.
^--- Vielleicht ein E :)

Hier und im anderen Thread wird immer nur beschrieben das es geht oder das das blödsinn ist. Aber wie muss es richtig aussehen, wie ist es sinnvoll und funktionsfähig. Das wird hier nie beschrieben.

Naja, ich weiss auch nicht was ich mir vorgestellt habe. Ist auch nicht so wichtig...

mschaefer 22. Sep 2008 05:40

Re: Standard DLL in VB geschrieben
 
Dll mit VB dass ist echt ein Ding! Klassse :thumb: Grüße // Martin

PS: Dieses VB ist regelmäßig totgesagt und taucht immer wieder auf...

sirius 22. Sep 2008 11:55

Re: Standard DLL in VB geschrieben
 
Zitat:

Zitat von EWeiss
Zitat:

Zitat von mkinzler
Und funktioniert diese auch in anderen Sprachen?

Versuchs doch einfach
Entry point hast ja ;)
gruss Emil

Waren wir eben nicht noch bei Interfaces :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr.
Seite 1 von 2  1 2      

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