deleted

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

suberror

Betreff: deleted

BeitragDi, Feb 14, 2006 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
gelöscht
  • Zuletzt bearbeitet von suberror am Sa, Mai 06, 2017 16:18, insgesamt einmal bearbeitet

rema

BeitragDi, Feb 14, 2006 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiss es zwar nicht 100% da ich auf Mac arbeite, aber ich denke du solltest nicht die Variabel übergeben, sondern einen Byte Pointer:

Code: [AUSKLAPPEN]
Extern "Win32"
Function GetComputerName:Int(lpBuffer:byte ptr,nSize:Int)="GetComputerNameA@8"
End Extern


Da die Variabel verschieden lang sein kann als @8Byte. Und so hast du mit BytePtr und Int genau 8 Byte... Ich weiss, ist nicht sehr gut erklärt...
 

suberror

BeitragDi, Feb 14, 2006 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
gelöscht
  • Zuletzt bearbeitet von suberror am Sa, Mai 06, 2017 16:18, insgesamt einmal bearbeitet

rema

BeitragDi, Feb 14, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, vergessen. String gibts ja in diesem sinne nicht. Du musst ein leeres Array erzeugen.

local CName:string[]

Hier gibts mehr zu lesen: http://www.blitzwiki.org/index.php/C_CallBacks

Markus2

BeitragMi, Feb 15, 2006 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Der String muß schon in der max. länge im Speicher sein und
dann übergibst du den Pointer vom String .
Die Rückgabe der länge ist die echte länge und dann
mußt du den String mit x=Left$(x,nSize) wieder kürzen .

Also eher so
local CName:string[MAX_COMPUTERNAME_LENGTH]

nSize ist als Parameter byref also da wird der Wert wieder
zurück geschrieben .

VB6
Code: [AUSKLAPPEN]

Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Form_Load()
    Dim dwLen As Long
    Dim strString As String
    'Create a buffer
    dwLen = MAX_COMPUTERNAME_LENGTH + 1
    strString = String(dwLen, "X")
    'Get the computer name
    GetComputerName strString, dwLen
    'get only the actual data
    strString = Left(strString, dwLen)
    'Show the computer name
    MsgBox strString
End Sub

Suco-X

Betreff: .....

BeitragMi, Feb 15, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
@Markus: Das ist falsch. Damit erstellst du nur ein Array mit Strings.
Man braucht ja nur einen Speicherbereich mit 32 bytes, damit er den Computernamen drin speichern kann.

So muss es normalerweise funktionieren, geht aber trotzdem nicht. Der Fehler liegt wohl wo anders, es ist egal mit was man die Funktion füttert, Fehler.
Code: [AUSKLAPPEN]

Strict

Const MAX_COMPUTERNAME_LENGTH = 31

Extern "Win32"
   Function GetComputerName:Int(lpBuffer:Byte Ptr, nSize:Int)="GetComputerNameA@8"
End Extern



Local Buf:Byte Ptr = MemAlloc(MAX_COMPUTERNAME_LENGTH+1)
Local size:Int = GetComputerName(Buf, MAX_COMPUTERNAME_LENGTH)
'GetComputerName(Null, 0) '<- Sollte einfach nur 0 zurückgeben, verursacht aber auch nen Fehler



Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Markus2

BeitragMi, Feb 15, 2006 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Em,ja,
meinte ich so Wink

Code: [AUSKLAPPEN]

Strict

Const MAX_COMPUTERNAME_LENGTH = 31

Extern "Win32"
   Function GetComputerName:Int(lpBuffer:Byte Ptr,nSize:Int Ptr)="GetComputerNameA@8"
End Extern

Local Buf:Byte Ptr = MemAlloc(MAX_COMPUTERNAME_LENGTH+1)
Local size:Int
size= MAX_COMPUTERNAME_LENGTH
GetComputerName(Buf,Varptr size)
DebugLog "Size="+size
If size Then DebugLog String.FromBytes(Buf,size)


 

suberror

BeitragMi, Feb 15, 2006 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
gelöscht

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group