Hallo an alle,
ich möchte gerne eine DLL mit MASM32 erstellen, die ich dann in VB benutzen möchte
kann mir da einer kurz auf die sprünge helfen
dll sollte z.B 2 Werte addieren
in VB
Private Declare Function Summe Lib "MyDllName" (ByVal A as Long, ByVal B as long) as long
ich würde mich freuen wenn mir einer da helfen könnte
Gruß Harald
DLL mit MASM erstellen
Moderatoren: crack, Krüsty, Marwin
schaue mal in:
masm32\examples\EXAMPLE1\DLL Ordner
wenn du dann noch Fragen hast:
http://spiff.tripnet.se/~iczelion/tut17.html
bzw (auf Deutsch):
http://www.joachimrohde.com/index_org_wojs.htm unter Übersetzungen, tut 17
und wenn dann noch etwas unklar ist - wieder hierher kommen
PS: ein Beispiel einer DLL, die die CPU Geschwindigkeit ermittelt:
masm32\examples\EXAMPLE1\DLL Ordner
wenn du dann noch Fragen hast:
http://spiff.tripnet.se/~iczelion/tut17.html
bzw (auf Deutsch):
http://www.joachimrohde.com/index_org_wojs.htm unter Übersetzungen, tut 17
und wenn dann noch etwas unklar ist - wieder hierher kommen
PS: ein Beispiel einer DLL, die die CPU Geschwindigkeit ermittelt:
-
HaraldDinslaken
- Newbie
- Beiträge: 4
- Registriert: Mittwoch 2. Juni 2004, 17:00
bei einem aufruf der DLL kann man Parameter mit übergeben
z.B. in VB
Private Declare Function ZeigeMeldung Lib "C:\masm32\code\dll\WorkerH.dll" (ByVal Text1 As String, ByVal Text2 As String) As Long
der Rückgabewert ist im Register eax
wie kann ich einen String (Text) von einer dll erhalten
hier der code der dll
.Data
ClassName1 db "Ein Programm",0
.data?
bufferA db 512 dup(?)
Myhwnd HWND ?
ZeigeMeldung proc para1:DWORD, para2:DWORD
invoke FindWindow,addr ClassName1,NULL
.IF eax != NULL
mov Myhwnd,eax
invoke GetWindowText,Myhwnd,addr bufferA,512
wie kann ich hier den gefundeen Text übergeben ?
oder kann man den Text auf die Variable para2 schreiben ?
.ENDIF
ret
ZeigeMeldung endp
END DllEntry
z.B. in VB
Private Declare Function ZeigeMeldung Lib "C:\masm32\code\dll\WorkerH.dll" (ByVal Text1 As String, ByVal Text2 As String) As Long
der Rückgabewert ist im Register eax
wie kann ich einen String (Text) von einer dll erhalten
hier der code der dll
.Data
ClassName1 db "Ein Programm",0
.data?
bufferA db 512 dup(?)
Myhwnd HWND ?
ZeigeMeldung proc para1:DWORD, para2:DWORD
invoke FindWindow,addr ClassName1,NULL
.IF eax != NULL
mov Myhwnd,eax
invoke GetWindowText,Myhwnd,addr bufferA,512
wie kann ich hier den gefundeen Text übergeben ?
oder kann man den Text auf die Variable para2 schreiben ?
.ENDIF
ret
ZeigeMeldung endp
END DllEntry
hm, die einfachste Lösung wäre der dll einen Zeiger auf den Buffer zu übergeben wo diese dann ihren String reinschreibt (ich weiß aber nicht ob VB zeiger unterstützt
aber vielleicht klappts, wenn du die Parameter als ByReferenz übergibst).
die andere Lösung wäre dass die DLL einen zeiger auf denn Buffer zurückliefert (nur vor dem Deaktivieren der DLL nicht vergessen den Buffer in dein aktuelles Prog zu kopieren).
Also wenn du der para2 eine gültige Adresse des Buffers übergibst (call byReferenz, ich weiß aber nicht wirklich wie VB das handelt, bei Pascal/Delphi wird dann die Adresse übergeben) dann kannst du den String hinkopieren, oder noch besser:
nvoke GetWindowText,Myhwnd,paria2,512 schreiben.
die andere Lösung wäre dass die DLL einen zeiger auf denn Buffer zurückliefert (nur vor dem Deaktivieren der DLL nicht vergessen den Buffer in dein aktuelles Prog zu kopieren).
Also wenn du der para2 eine gültige Adresse des Buffers übergibst (call byReferenz, ich weiß aber nicht wirklich wie VB das handelt, bei Pascal/Delphi wird dann die Adresse übergeben) dann kannst du den String hinkopieren, oder noch besser:
nvoke GetWindowText,Myhwnd,paria2,512 schreiben.
-
HaraldDinslaken
- Newbie
- Beiträge: 4
- Registriert: Mittwoch 2. Juni 2004, 17:00
Super das war genau die Lösung
ZeigeMeldung proc para1:DWORD, para2:DWORD
invoke FindWindow,addr ClassName1,NULL
.IF eax != NULL
mov Myhwnd,eax
invoke GetWindowText,Myhwnd,para2,512
und in vb
Private Declare Function ZeigeMeldung Lib "C:\masm32\code\dll\WorkerH.dll" (ByVal Text1 As String, ByVal Text2 As String) As Long
Sub hh(T1 As String, T2 As String)
Dim i As Long
i = 0
i = ZeigeMeldung(T1, T2)
End Sub
und auf der Variable T2 ist der Text der aAnwendung zu lesen
Danke für deinen Tip
ich habe fast 4 Stunden im Internet nach einer Lösung gesucht, aber nichts gefunden
ich denke ich werde hier noch einige Fragen stellen, und hoffe das ich auch mal Antworten kann
bis denne
Gruß Harald
ZeigeMeldung proc para1:DWORD, para2:DWORD
invoke FindWindow,addr ClassName1,NULL
.IF eax != NULL
mov Myhwnd,eax
invoke GetWindowText,Myhwnd,para2,512
und in vb
Private Declare Function ZeigeMeldung Lib "C:\masm32\code\dll\WorkerH.dll" (ByVal Text1 As String, ByVal Text2 As String) As Long
Sub hh(T1 As String, T2 As String)
Dim i As Long
i = 0
i = ZeigeMeldung(T1, T2)
End Sub
und auf der Variable T2 ist der Text der aAnwendung zu lesen
Danke für deinen Tip
ich habe fast 4 Stunden im Internet nach einer Lösung gesucht, aber nichts gefunden
ich denke ich werde hier noch einige Fragen stellen, und hoffe das ich auch mal Antworten kann
bis denne
Gruß Harald