DLL mit MASM erstellen

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Beitragvon HaraldDinslaken » Donnerstag 3. Juni 2004, 12:39

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
HaraldDinslaken
Newbie
 
Beiträge: 4
Registriert: Mittwoch 2. Juni 2004, 17:00

Beitragvon CDW » Donnerstag 3. Juni 2004, 16:59

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:
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon HaraldDinslaken » Freitag 4. Juni 2004, 12:01

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
HaraldDinslaken
Newbie
 
Beiträge: 4
Registriert: Mittwoch 2. Juni 2004, 17:00

Beitragvon CDW » Freitag 4. Juni 2004, 13:23

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.
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon HaraldDinslaken » Freitag 4. Juni 2004, 23:07

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
HaraldDinslaken
Newbie
 
Beiträge: 4
Registriert: Mittwoch 2. Juni 2004, 17:00


Zurück zu Assembler

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron