dll funktion liefert kein ergebnis

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

tix

Betreff: dll funktion liefert kein ergebnis

BeitragSo, März 28, 2010 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit:

normalerweise soll der benutzer name ausgegeben werden der aktuell angemeldet ist

--------------------------------------------------------------------------

naja hab das so umgesetzt wie chaos im chat gesagt hat
denke is besser alles mal auf einem blick zu sehen
theoretisch sollte das kein problem sein aber naja

Code: [AUSKLAPPEN]

Local lib2:Int = LoadLibraryA("advapi32.dll")
Assert lib2, "DLL wurde nicht geladen"

Global GetUserNameA:Long(lpBuffer:Byte Ptr,Size:Long)"Win32" = GetProcAddress(lib2,"GetUserNameA")

Local buf:Byte Ptr = MemAlloc(32)
Print GetUserNameA(buf,32)

Print Int(buf)
Local name:String = String.FromCString(buf)
MemFree(buf)

Print name



msdn beispiel
Code: [AUSKLAPPEN]
' Benutzernamen ermitteln:
Private Declare Function GetUserName _
  Lib "advapi32.dll" Alias "GetUserNameA" ( _
  ByVal lpBuffer As String, _
  ByRef Size As Long _
  ) As Long


nach dem ich mich durch das gesamt thema gekämpft hab
weiß ich jez auch net warum er nichts abliefert ausliefert oder zurückliefert
oder so ^^

Jo0oker

BeitragSo, März 28, 2010 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch es mal so:

Code: [AUSKLAPPEN]

Global GetUserNameA:Long(lpBuffer:Byte Ptr,Size:Long)"Win32" = GetProcAddress(lib2,"GetUserNameA@8")

Edit:
So bekomme ich ein Ergebnis, wenn auch ein recht komisches:
Code: [AUSKLAPPEN]

Local lib2:Int = LoadLibraryA("advapi32.dll")


Global GetUserNameA:Long(lpBuffer:Byte Ptr,Size:Long)"win32" = GetProcAddress(lib2,"GetUserNameA")

Local buf:Byte Ptr = MemAlloc(32)
Print GetUserNameA(buf,32)

Print Int(buf)
Local name:String = String.FromCString(buf)
MemFree(buf)

Print name
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

ChristianK

BeitragMo, März 29, 2010 2:43
Antworten mit Zitat
Benutzer-Profile anzeigen
GetUserName gibt einen 32-Bit-Wert zurück (Long hat 64 Bit). Der zweiter Parameter ist ein Zeiger auf eine 32-Bit-Variable.

Code: [AUSKLAPPEN]
Local lib2:Int = LoadLibraryA("advapi32.dll")
Assert lib2, "DLL wurde nicht geladen"

Global GetUserNameA:Int(lpBuffer:Byte Ptr, Size:Int Ptr) "Win32" = GetProcAddress(lib2, "GetUserNameA")

Local buf:Byte Ptr = MemAlloc(32)
Local size:Int = 32
 
GetUserNameA(buf, Varptr size)

Local name:String = String.FromCString(buf)
MemFree(buf)

Print name
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

tix

BeitragMo, März 29, 2010 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz ehrlich ich hab auf dich gewartet Rolling Eyes
danKe (es geht)

aber was mich verwirrt ist das bei msdn

Code: [AUSKLAPPEN]
GetUserNameA(ByVal lpBuffer As String,ByRef Size As Long) As Long


steht
-.-
ich hab schon geahnt das bei den parametern was net hinhaut
ich hoffe ich krieg das bei anderen funktionen hin die parameter richtig zu deuten

ich weiß eig schon das cstrings immer pointer sind und bei referenzen nur die adresse der variable über geben wird

Edit:
-------------------------------------------------------------------

also irwie check ich das mit den parametern nich so richtig, ich liste mal alle variationen auf

Code: [AUSKLAPPEN]
msdn beispiel               dll func param    basic dekl
-----------------------------------------------------------------------
As Long                     >>> Int           (Int)
ByVal ServerName As Long    >>> Byte Ptr      (String)
ByVal UserName As Long      >>> Byte Ptr      (String)
ByVal Level As Long         >>> Byte Ptr      (String)
ByVal Size As Long          >>> Byte Ptr      (String)

ByVal lpBuffer As String    >>> Byte Ptr      (Byte Ptr)
ByVal UserName As String    >>> Byte Ptr      (Byte Ptr)

ByRef Size As Long          >>> Int Ptr       (Int)
ByRef ptrBuffer As Long     >>> Int Ptr       (Int)

ByRef Destination As Any    >>> Int Ptr       (UserType)
ByRef Source As Any         >>> Int Ptr


bin mir eig sicher das da n fehler drin is ^^

Msdn beispiel

kurz

Code: [AUSKLAPPEN]
NetUserGetInfo(
ByVal ServerName As Long,
ByVal UserName As Long,
ByVal Level As Long,
ByRef ptrBuffer As Long
) As Long

NetApiBufferFree(
ByVal ptrBuffer As Long
) As Long

GetUserNameA(
ByVal lpBuffer As String,
ByRef Size As Long
) As Long

RtlMoveMemory(
ByRef Destination As Any,
ByRef Source As Any,
ByVal Size As Long)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group