调用其他函数可以,就是SetCallback注册回调后不进入回调函数高手帮忙看一下,多谢了
#if !defined(AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED_)
#define AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "stdAfx.h"#define EDDATAERROR 1000 //数据错误
#define EDBUFOVERFLOW 1001 //模块缓冲区溢出
#define EDRECVBUFOVERFLOW 1002 //电脑接收缓冲区溢出,用于阻塞接收调用typedef void (CALLBACK* LPONACCEPT)(long ConnectID);
typedef void (CALLBACK* LPONCONNECTCLOSE)(long ConnectID);
typedef void (CALLBACK* LPONERROR)(long SocketID,long ErrorCode);
typedef void (CALLBACK* LPONRECECONFIGDATA)(long ConnectID,LPBYTE pDataBuf,long DataLength);
typedef void (CALLBACK* LPONRECEFROMCOM)(long ConnectID,long COMNum,LPBYTE pDataBuf,long DataLength);
typedef void (CALLBACK* LPONSWITCHCHANGE)(long ConnectID,long PortNum,long Value);
#ifdef EDSOCKSERVER_EXPORTS#define EDSOCKSERVER_API extern "C" __declspec(dllexport)#else#ifdef __cplusplus
#define EDSOCKSERVER_API extern "C" __declspec(dllimport)
#else
#define EDSOCKSERVER_API __declspec(dllimport)
#endif#endif
EDSOCKSERVER_API int WINAPI mac_ntoa(BYTE *mac,int maclen,BYTE *strmac,int strlen);
EDSOCKSERVER_API int WINAPI net_ntoa(u_long ipAddr,BYTE *str,int strlen);EDSOCKSERVER_API u_long WINAPI GetLocalIP(long ConnectID);
EDSOCKSERVER_API long WINAPI GetLocalPort(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI StartListen(LPCTSTR LocalIP,long LocalPort);
EDSOCKSERVER_API BOOL WINAPI StopListen();
EDSOCKSERVER_API BOOL WINAPI CloseConnect(long ConnectID);
EDSOCKSERVER_API long WINAPI GetError(long SocketID);
EDSOCKSERVER_API u_long WINAPI GetPeerIP(long ConnectID);
EDSOCKSERVER_API long WINAPI GetPeerPort(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI OpenConnect(LPCTSTR PeerIP, long PeerPort,LPCTSTR LocalIP,long LocalPort);
EDSOCKSERVER_API int WINAPI GetMAC(long ConnectID,LPBYTE lpMac,int maclen);
EDSOCKSERVER_API long WINAPI GetSwitchDirection(long ConnectID, long PortNum);
EDSOCKSERVER_API BOOL WINAPI SendToCOM(long ConnectID, long COMNum, LPBYTE pDataBuf, long DataLength);
EDSOCKSERVER_API BOOL WINAPI SetSwitchValue(long ConnectID, long PortNum, long Value);
EDSOCKSERVER_API BOOL WINAPI RequestConfigData(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI SetConfigData(long ConnectID, LPBYTE pDataBuf, long DataLength);
EDSOCKSERVER_API long WINAPI GetSwitchValue(long ConnectID, long PortNum);
EDSOCKSERVER_API long WINAPI ResetBoard(long ConnectID);
EDSOCKSERVER_API short WINAPI GetModel(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI SetCOMPara(long ConnectID, long COMNum, LPBYTE pDataBuf,long DataLength);
EDSOCKSERVER_API BOOL WINAPI IsSocket();
EDSOCKSERVER_API BOOL WINAPI IsNoDelay();
EDSOCKSERVER_API BOOL WINAPI SetSocket(BOOL IsSocketValue);
EDSOCKSERVER_API BOOL WINAPI SetNoDelay(BOOL IsNoDelayValue);
EDSOCKSERVER_API BOOL WINAPI SetCallback(LPONACCEPT lpOnAccept,LPONCONNECTCLOSE lpOnConnectClose,LPONERROR lpOnError,LPONRECECONFIGDATA lpOnReceConfigData,LPONRECEFROMCOM lpOnReceFromCom,LPONSWITCHCHANGE lpOnSwitchChange);
EDSOCKSERVER_API BOOL WINAPI CloseAllConnect();
EDSOCKSERVER_API BOOL WINAPI SetConnectOpt(long ConnectID,int level,int optname,const char FAR *optval,int optlen);
EDSOCKSERVER_API int WINAPI GetCOM(long ConnectID);
EDSOCKSERVER_API long WINAPI ReceiveData(long ConnectID,LPBYTE pDataBuf,long BufLen,DWORD dwWait);//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED)
Java的代码
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;public interface C2000SDK extends StdCallLibrary{
C2000SDK INSTANCE = (C2000SDK) Native.loadLibrary("EdSockServer",C2000SDK.class); boolean CloseAllConnect(); boolean CloseConnect(NativeLong ConnectID); short GetCOM(NativeLong ConnectID); short GetError(NativeLong SocketID); NativeLong GetLocalIP(NativeLong ConnectID); NativeLong GetLocalPort(NativeLong ConnectID); int GetMAC(NativeLong ConnectID,byte[] lpMac,int maclen); short GetModel(NativeLong ConnectID); NativeLong GetPeerIP(NativeLong ConnectID); NativeLong GetPeerPort(NativeLong ConnectID); NativeLong GetSwitchDirection(NativeLong ConnectID,NativeLong PortNum); NativeLong GetSwitchValue(NativeLong ConnectID,NativeLong PortNum); boolean IsNoDelay(); boolean IsSocket(); NativeLong ReceiveData(NativeLong ConnectID,byte[] pDataBuf,NativeLong BufLen,int dwWait); boolean OpenConnect(String PeerIP,NativeLong PeerPort,String LocalIP,NativeLong LocalPort); boolean RequestConfigData(NativeLong ConnectID); NativeLong ResetBoard(NativeLong ConnectID); boolean SendToCOM(NativeLong ConnectID,NativeLong COMNum,byte[] pDataBuf,NativeLong DataLength); boolean SetCallback(OnAccept lpOnAccept,OnConnectClose lpOnConnectClose,OnError lpOnError,OnReceConfigData lpOnReceConfigData,OnReceFromCOM lpOnReceFromCOM,OnSwitchChange lpOnSwitchChange); boolean SetCOMPara(NativeLong ConnectID,NativeLong COMNum,byte[] pDataBuf,NativeLong DataLength); boolean SetConfigData(NativeLong ConnectID,byte[] pDataBuf,NativeLong DataLength); boolean SetNoDelay(boolean IsNoDelayValue); boolean SetSocket(boolean IsSocketValue); boolean SetSwitchValue(NativeLong ConnectID,NativeLong PortNum,NativeLong Value); boolean StartListen(String LocalIP,NativeLong LocalPort); boolean StopListen(); public static interface OnAccept extends StdCallCallback{
public void invoke(NativeLong ConnectID);
} public static interface OnConnectClose extends StdCallCallback{
public void invoke(NativeLong ConnectID);
} public static interface OnError extends StdCallCallback{
public void invoke(NativeLong SocketID,NativeLong ErrorCode);
} public static interface OnReceConfigData extends StdCallCallback{
public void invoke(NativeLong ConnectID,ByteByReference pDataBuf,NativeLong DataLength);
} public static interface OnReceFromCOM extends StdCallCallback{
public void invoke(NativeLong ConnectID,NativeLong COMNum,ByteByReference pDataBuf,NativeLong DataLength);
} public static interface OnSwitchChange extends StdCallCallback{
public void invoke(NativeLong ConnectID,NativeLong PortNum,NativeLong Value);
}
}
#if !defined(AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED_)
#define AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "stdAfx.h"#define EDDATAERROR 1000 //数据错误
#define EDBUFOVERFLOW 1001 //模块缓冲区溢出
#define EDRECVBUFOVERFLOW 1002 //电脑接收缓冲区溢出,用于阻塞接收调用typedef void (CALLBACK* LPONACCEPT)(long ConnectID);
typedef void (CALLBACK* LPONCONNECTCLOSE)(long ConnectID);
typedef void (CALLBACK* LPONERROR)(long SocketID,long ErrorCode);
typedef void (CALLBACK* LPONRECECONFIGDATA)(long ConnectID,LPBYTE pDataBuf,long DataLength);
typedef void (CALLBACK* LPONRECEFROMCOM)(long ConnectID,long COMNum,LPBYTE pDataBuf,long DataLength);
typedef void (CALLBACK* LPONSWITCHCHANGE)(long ConnectID,long PortNum,long Value);
#ifdef EDSOCKSERVER_EXPORTS#define EDSOCKSERVER_API extern "C" __declspec(dllexport)#else#ifdef __cplusplus
#define EDSOCKSERVER_API extern "C" __declspec(dllimport)
#else
#define EDSOCKSERVER_API __declspec(dllimport)
#endif#endif
EDSOCKSERVER_API int WINAPI mac_ntoa(BYTE *mac,int maclen,BYTE *strmac,int strlen);
EDSOCKSERVER_API int WINAPI net_ntoa(u_long ipAddr,BYTE *str,int strlen);EDSOCKSERVER_API u_long WINAPI GetLocalIP(long ConnectID);
EDSOCKSERVER_API long WINAPI GetLocalPort(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI StartListen(LPCTSTR LocalIP,long LocalPort);
EDSOCKSERVER_API BOOL WINAPI StopListen();
EDSOCKSERVER_API BOOL WINAPI CloseConnect(long ConnectID);
EDSOCKSERVER_API long WINAPI GetError(long SocketID);
EDSOCKSERVER_API u_long WINAPI GetPeerIP(long ConnectID);
EDSOCKSERVER_API long WINAPI GetPeerPort(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI OpenConnect(LPCTSTR PeerIP, long PeerPort,LPCTSTR LocalIP,long LocalPort);
EDSOCKSERVER_API int WINAPI GetMAC(long ConnectID,LPBYTE lpMac,int maclen);
EDSOCKSERVER_API long WINAPI GetSwitchDirection(long ConnectID, long PortNum);
EDSOCKSERVER_API BOOL WINAPI SendToCOM(long ConnectID, long COMNum, LPBYTE pDataBuf, long DataLength);
EDSOCKSERVER_API BOOL WINAPI SetSwitchValue(long ConnectID, long PortNum, long Value);
EDSOCKSERVER_API BOOL WINAPI RequestConfigData(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI SetConfigData(long ConnectID, LPBYTE pDataBuf, long DataLength);
EDSOCKSERVER_API long WINAPI GetSwitchValue(long ConnectID, long PortNum);
EDSOCKSERVER_API long WINAPI ResetBoard(long ConnectID);
EDSOCKSERVER_API short WINAPI GetModel(long ConnectID);
EDSOCKSERVER_API BOOL WINAPI SetCOMPara(long ConnectID, long COMNum, LPBYTE pDataBuf,long DataLength);
EDSOCKSERVER_API BOOL WINAPI IsSocket();
EDSOCKSERVER_API BOOL WINAPI IsNoDelay();
EDSOCKSERVER_API BOOL WINAPI SetSocket(BOOL IsSocketValue);
EDSOCKSERVER_API BOOL WINAPI SetNoDelay(BOOL IsNoDelayValue);
EDSOCKSERVER_API BOOL WINAPI SetCallback(LPONACCEPT lpOnAccept,LPONCONNECTCLOSE lpOnConnectClose,LPONERROR lpOnError,LPONRECECONFIGDATA lpOnReceConfigData,LPONRECEFROMCOM lpOnReceFromCom,LPONSWITCHCHANGE lpOnSwitchChange);
EDSOCKSERVER_API BOOL WINAPI CloseAllConnect();
EDSOCKSERVER_API BOOL WINAPI SetConnectOpt(long ConnectID,int level,int optname,const char FAR *optval,int optlen);
EDSOCKSERVER_API int WINAPI GetCOM(long ConnectID);
EDSOCKSERVER_API long WINAPI ReceiveData(long ConnectID,LPBYTE pDataBuf,long BufLen,DWORD dwWait);//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_EDSOCKSERVERCTL_H__1FA54A89_2A76_4CA9_B42B_9584C7B73245__INCLUDED)
Java的代码
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;public interface C2000SDK extends StdCallLibrary{
C2000SDK INSTANCE = (C2000SDK) Native.loadLibrary("EdSockServer",C2000SDK.class); boolean CloseAllConnect(); boolean CloseConnect(NativeLong ConnectID); short GetCOM(NativeLong ConnectID); short GetError(NativeLong SocketID); NativeLong GetLocalIP(NativeLong ConnectID); NativeLong GetLocalPort(NativeLong ConnectID); int GetMAC(NativeLong ConnectID,byte[] lpMac,int maclen); short GetModel(NativeLong ConnectID); NativeLong GetPeerIP(NativeLong ConnectID); NativeLong GetPeerPort(NativeLong ConnectID); NativeLong GetSwitchDirection(NativeLong ConnectID,NativeLong PortNum); NativeLong GetSwitchValue(NativeLong ConnectID,NativeLong PortNum); boolean IsNoDelay(); boolean IsSocket(); NativeLong ReceiveData(NativeLong ConnectID,byte[] pDataBuf,NativeLong BufLen,int dwWait); boolean OpenConnect(String PeerIP,NativeLong PeerPort,String LocalIP,NativeLong LocalPort); boolean RequestConfigData(NativeLong ConnectID); NativeLong ResetBoard(NativeLong ConnectID); boolean SendToCOM(NativeLong ConnectID,NativeLong COMNum,byte[] pDataBuf,NativeLong DataLength); boolean SetCallback(OnAccept lpOnAccept,OnConnectClose lpOnConnectClose,OnError lpOnError,OnReceConfigData lpOnReceConfigData,OnReceFromCOM lpOnReceFromCOM,OnSwitchChange lpOnSwitchChange); boolean SetCOMPara(NativeLong ConnectID,NativeLong COMNum,byte[] pDataBuf,NativeLong DataLength); boolean SetConfigData(NativeLong ConnectID,byte[] pDataBuf,NativeLong DataLength); boolean SetNoDelay(boolean IsNoDelayValue); boolean SetSocket(boolean IsSocketValue); boolean SetSwitchValue(NativeLong ConnectID,NativeLong PortNum,NativeLong Value); boolean StartListen(String LocalIP,NativeLong LocalPort); boolean StopListen(); public static interface OnAccept extends StdCallCallback{
public void invoke(NativeLong ConnectID);
} public static interface OnConnectClose extends StdCallCallback{
public void invoke(NativeLong ConnectID);
} public static interface OnError extends StdCallCallback{
public void invoke(NativeLong SocketID,NativeLong ErrorCode);
} public static interface OnReceConfigData extends StdCallCallback{
public void invoke(NativeLong ConnectID,ByteByReference pDataBuf,NativeLong DataLength);
} public static interface OnReceFromCOM extends StdCallCallback{
public void invoke(NativeLong ConnectID,NativeLong COMNum,ByteByReference pDataBuf,NativeLong DataLength);
} public static interface OnSwitchChange extends StdCallCallback{
public void invoke(NativeLong ConnectID,NativeLong PortNum,NativeLong Value);
}
}
就是JNA呀 JNI早就不用了吧