rs232-dll von purebasic einlesen und auswerten

Previous topic - Next topic

pebisoft

hallo, ich bin neu mit glbasic beschäftigt. zur zeit noch in einer testphase.

wie kann ich die mit purebasic erstellte dll ansprechen. die musterdll die ich hier irgendwie einmal gelesen habe gibt noch nicht wesentliches her für eine anwendung.
diese dll unten ist für die com-schnittstelle.

Code (glbasic) Select
Global HCom.l
Global Chaine.s
Global los.s
Global buffer.c

ProcedureDLL.l  com_open()
If HCom=0
  #BufferIn = 17000
  #BufferOut = 17000
  Chaine="COM1:19200,N,8,1"
  HCom=ComOpen(Chaine,0 ,#BufferIn,#BufferOut)
  ProcedureReturn Hcom.l
 EndIf
EndProcedure

ProcedureDLL com_txd(text.s)
  los.s = text +Chr(13)
  ComWrite(HCom,@los,Len(los))
EndProcedure

ProcedureDLL.c com_rxd()
  ComRead(HCom,@buffer,1)
  ProcedureReturn buffer.c    
EndProcedure

ProcedureDLL com_close()
  If HCom <> 0
    If ComClose(HCom)
      HCom = 0
    EndIf
  EndIf
EndProcedure
danke für die hilfe.

mfg

Kitty Hello

Ich kann kein PureBasic. Kannst Du die .dll mal hochladen //www.zshare.com, dann schau ich mir die Parameter mal an un schreib Dir GLBasic code dafür.

pebisoft

wie kann ich die dll von dem obigen pure-sourcecode hochladen?
mfg

Kitty Hello

Oh zshare hat sich geändert...
Ist das so etwa:
com_open(), gibt 32bit integer zurück, keine Argumente.
com_txd(), gibt nichts zurück, erwartet Zeiger auf 8bit character string.
com_rxd(), gibt 8 bit character zurück, erwartet keine Argumente.
com_close(), nix zrück, keine Args.

Ja?

Jetzt ist noch wichtig, welche Aufrufkonvention gemacht wurde.

Das kann man einfach testen - wenn's scheppert, passt sie nicht ;)

Code (glbasic) Select
// Damit schließt man die Main() ab
FUNCTION dummy:
ENDFUNCTION

INLINE
#define EXTC extern "C"
#define CALLCV __stdcall

// Wenn's nicht geht: probieren mit:
// #define EXTC
// #define CALLCV
// oder
// #define EXTC extern "C"
// #define CALLCV

EXTC {
int  (CALLCV *xcom_open)()=0;            DLLCALL("muster.dll", "com_open", (void**)&xcom_open);
void (CALLCV *xcom_txd )(const char*)=0; DLLCALL("muster.dll", "com_txd" , (void**)&xcom_txd );
char (CALLCV *xcom_rxd )()=0;            DLLCALL("muster.dll", "com_rxd" , (void**)&xcom_rxd );
void (CALLCV *xcom_close)()=0;           DLLCALL("muster.dll", "com_close",(void**)&xcom_close);
}
ENDINLINE

FUNCTION com_open:
INLINE
return xcom_open();
ENDINLINE
ENDFUNCTION

FUNCTION com_txd: text$
INLINE
xcom_txd(text_Str.c_str() );
ENDINLINE
ENDFUNCTION

FUNCTION com_rxd$:
INLINE
return CHR_Str(xcom_rxd());
ENDINLINE
ENDFUNCTION

FUNCTION com_close:
INLINE
xcom_close();
ENDINLINE
ENDFUNCTION

Maxheadroom

please can you translate to english :)