DLL Laden. Einige Funktionen Funzen nicht o.O

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

FOODy

Betreff: DLL Laden. Einige Funktionen Funzen nicht o.O

BeitragDi, Jun 20, 2006 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute.
Also mein Problem diesmal ist, dass einige Funktionen die ich aus einer DLL Lese nicht funktionieren.
[Den Sourcecode der DLL habe ich leider nicht]
Um genauer zu sein sind es die Soc***** Funktionen. o.O
Die anderen scheinen richtig zu funktionieren.

:-/

Kann mir da vllt jemand helfen?

Hier ist der Code:
Code: [AUSKLAPPEN]
Strict
Import pub.win32
'==============================================================================================
'Konstanten
'==============================================================================================
Const SOC_BYTE = 1
Const SOC_DOUBLE = 5
Const SOC_FLOAT = 4
Const SOC_HANG = 16
Const SOC_INT = 3
Const SOC_LISTEN = 8
Const SOC_MULTICAST = 32
Const SOC_SHORT = 2
Const SOC_STRING = 0
Const SOC_TCP = 1
Const SOC_THREAD = 4
Const SOC_UDP = 2
'==============================================================================================
'Variablen
'==============================================================================================
Global SocFileName:String = "soc.dll"
Global SocFileHandle:Int = LoadLibraryA(SocFileName)

If SocFileHandle = 0
   Throw "Soc.dll not initialized!"
EndIf
'==============================================================================================
'DLL auslesen
'==============================================================================================
'Buffer
Global _buffer_create() = GetProcAddress(SocFileHandle,"BufferCreate")
Global _buffer_destroy(buf) = GetProcAddress(SocFileHandle,"BufferDestroy")
Global _buffer_add(buf,datatype,number,str$z) = GetProcAddress(SocFileHandle,"BufferAdd")
'Sockets
Global _soc_create(mode,port,ip$z) = GetProcAddress(SocFileHandle,"SocCreate")
Global _soc_destroy(soc) = GetProcAddress(SocFileHandle,"SocDestroy")
Global _soc_valid(soc) = GetProcAddress(SocFileHandle,"SocValid")
Global _soc_accept(soc) = GetProcAddress(SocFileHandle,"SocAccept")
Global _soc_peek(soc,datatype,size) = GetProcAddress(SocFileHandle,"SocPeek")
Global _soc_send(soc,buffer,port,ip$z) = GetProcAddress(SocFileHandle,"SocSendBuffer")
Global _soc_send_token(soc,str$z,delimiter$z,port,ip$z) = GetProcAddress(SocFileHandle,"SocSendToken")
Global _soc_receive_real(soc,datatype) = GetProcAddress(SocFileHandle,"SocReceiveReal")
Global _soc_receive_string$z(soc,datatype,size) = GetProcAddress(SocFileHandle,"SocReceiveString")
Global _soc_receive_token$z(soc,delimiter$z) = GetProcAddress(SocFileHandle,"SocReceiveToken")
'Zeugz
Global _sha256$z(str$z) = GetProcAddress(SocFileHandle,"Sha256")
Global _internet_status() = GetProcAddress(SocFileHandle,"InternetStatus")
Global _soc_ipaddress$z(soc) = GetProcAddress(SocFileHandle,"SocIpAddress")
'==============================================================================================
'Funktionen
'==============================================================================================
':::::::::::::::::: BUFFER
Function Buffer_Create()
   Return _buffer_create()
EndFunction

Function Buffer_Destroy(buf:Int)
   Return _buffer_destroy(buf)
EndFunction

Function Buffer_Add(buf:Int,datatype:Int,number:Int,str:String = "")
   Return _buffer_add(buf,datatype,number,str)
EndFunction
':::::::::::::::::: SOCKETS
Function Soc_Create(mode:Int,port:Int,ip:String = "")
   Return _soc_create(mode,port,ip)
EndFunction

Function Soc_Destroy(soc:Int)
   Return _soc_destroy(soc)
EndFunction

Function Soc_Accept(soc:Int)
   Return _soc_accept(soc)
EndFunction

Function Soc_Peek(soc:Int,datatype:Int,size:Int = 0)
   Return _soc_peek(soc,datatype,size)
EndFunction

Function Soc_Send(soc:Int,buffer:Int,port:Int = Null,ip:String = Null)
   Return _soc_send(soc,buffer,port,ip)
EndFunction

Function Soc_Send_Token(soc:Int,str:String,delimiter:String = "~n",port:Int = Null,ip:String = Null)
   Return _soc_send_token(soc,str,delimiter,port,ip)
EndFunction

Function Soc_Receive_Real:Int(soc:Int,datatype:Int)
   If(datatype<>SOC_STRING)
      Return _soc_receive_real(soc,datatype)
   Else
      Return 0
   EndIf
EndFunction

Function Soc_Receive_String:String(soc:Int,datatype:Int,size:Int)
   If(datatype=SOC_STRING)
      Return _soc_receive_string(soc,datatype,size)
   Else
      Return String(_soc_receive_real(soc,datatype))
   EndIf
EndFunction

Function Soc_Receive_Token:String(soc:Int,delimiter:String)
   Return _soc_receive_token(soc,delimiter)
EndFunction

Function Soc_Valid(soc:Int)
   Return _soc_valid(soc)
EndFunction
':::::::::::::::::: ZEUGZ
Function Sha256:String(str:String)
   Return _sha256(str)
EndFunction

Function Soc_IpAddress:String(soc:Int)
   Return _soc_ipaddress(soc)
EndFunction

Function Internet_Status:Int()
   Return _internet_status()
EndFunction


Es wird aber kein Fehler angezeigt.
Nur bekommt der Soc Handle bei Soc_Create immer den Wert 4012560. ~_~


Hier ist der ganze packen mit DLL:
http://futura-studios.de/Zeugz/soc.mod.rar


Freue mich wenn ihr mir helfen werdet...

BtbN

BeitragDi, Jun 20, 2006 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich kann dir zwar den Fehler nicht sagen, aber Sockets sind schon in BMax implementiert. Und für mich sieht das nach Socket-Funktionen aus.
 

Dreamora

BeitragDi, Jun 20, 2006 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem sind wahrscheinlich jene wo du str:String übergeben willst. Dort muss du $z als type angeben, nicht :string
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

FOODy

BeitragDi, Jun 20, 2006 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
an dem CString liegt es nicht....
Habs geändert aber gleiches prob.
Kann es vllt sein das die funktion nicht richtig initialisiert wurde?


@BtNL:
Ich weiß das BlitzMax eigene hat.
Aber ich muss einen Freund überzeugen von dem Game Maker (www.gamemaker.nl) auf BlitzMax umzusteigen ^^ (also mehr mit BM machen statt mit dem GM)
Dafür verlangt er von mir, dass ich die soc engine die für den GM gemacht wurde auf BlitzMax rüberdinger.

So wie es aussieht scheint auch alles bis auf die funktionen, die ein Socket zurückgeben sollten, zu funktionieren.


EDIT:
Wenn ich den Socket Rückgabewert auf Double oder Long setzte ändert sich komischerweise die Situation (funzt aber trotzdem net ^^).
 

Dreamora

BeitragDi, Jun 20, 2006 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
dann setz mal den typ auf Int
Wobei mit grösster Wahrscheinlichkeit müsste es :Byte Ptr sein und du musst den socket dann entsprechend auch wieder unbinden können
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

FOODy

BeitragDi, Jun 20, 2006 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm...
Habs jetzt als Byte Ptr.
Komisch ist das der socket jetzt immer den wert 60 hat o.O
Ich glaub ich lass den Kot.
Hat ey kein sinn das zu machen und vorallem mit einer fremden dll von der man keine rückgabe infos hat >_>

Werd dann einfach versuchen die bereits vorhandenen Socket funktionen dafür verwenden...



Falls es dennoch jemand hinbekommt -> bitte melden Very Happy


Ich danke die Dreamora und BORNtobeNAMELESS für euer bemühen mir zu helfen Very Happy


.:: FOODy

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group