=================================================
NetRy4 Interface for C#
=================================================

1.Register NetRy4Com.dll. (using Regsvr32.exe, or call routines in NetRy4Com.dll).
2.Create a c# project by VS.Net, Select Reference in Solution,then click Com, select "NetRockey4 Classlibrary for .Net",Add the reference of Ry4Com.dll to project.
3.Add below codes to your program:

using System.Runtime.InteropServices;
using NetROCKEY4;

4.Add below enums to your program. (Caution: The return code of NetRy4COM is NOT same as NetRockey4 API. The rule of new return code is : HIWORD is 0x8030,LOWORD is return code of NetRockey4 API).

enum NetRy4Cmd:ushort
{
		RY_FIND=1,			//Find Rockey4.
		RY_FIND_NEXT,		//Find next Rockey4.
		RY_OPEN,			//Open 
		RY_CLOSE,			//Close
		RY_READ,			//Read UDZ
		RY_WRITE,			//Write UDZ
		RY_RANDOM,			//Random
		RY_SEED,			//Seed code		
		RY_READ_USERID=10,	//Read UID		
		RY_CHECK_MODULE=12,	//Check module status		
		RY_CALCULATE1=14,	//Calculate 1
		RY_CALCULATE2,		//Calculate 2
		RY_CALCULATE3,		//Calculate 3
		RY_DECREASE			//Decrease
};


enum Ry4Type:uint
{
		// Rockey4 Type
		TYPE_ROCKEY4=1,			//Normal Ry4.
		TYPE_ROCKEY4Plus,		//Ry4Plus.
		TYPE_ROCKEYUSB,			//Ry4 USB.
		TYPE_ROCKEYUSBPlus,		//Ry4 USB Plus
		TYPE_ROCKEYNET,			//NetRy4
		TYPE_ROCKEYUSBNET		//NetRy4 USB.
};


	
enum Ry4ErrCode:uint
	{
		ERR_SUCCESS=0,							//No error.
        ERR_NO_PARALLEL_PORT=0x80300001,		//(0x80300001)No parallel port on the computer 
        ERR_NO_DRIVER,							//(0x80300002)No driver installed 
        ERR_NO_ROCKEY,							//(0x80300003)No ROCKEY4 dongle 
        ERR_INVALID_PASSWORD,					//(0x80300004)ROCKEY4 dongle found, but base password is incorrect
        ERR_INVALID_PASSWORD_OR_ID,				//(0x80300005)Wrong password or ROCKEY4 HID
        ERR_SETID,								//(0x80300006)Set ROCKEY4 HID wrong
        ERR_INVALID_ADDR_OR_SIZE,				//(0x80300007)Read/Write address is wrong
        ERR_UNKNOWN_COMMAND,					//(0x80300008)No such command
        ERR_NOTBELEVEL3,						//(0x80300009)Inside error
        ERR_READ,								//(0x8030000A)Read error
        ERR_WRITE,								//(0x8030000B)Write error
        ERR_RANDOM,								//(0x8030000C)Random error
        ERR_SEED,								//(0x8030000D)Seed Code error
        ERR_CALCULATE,							//(0x8030000E)Calculate error
        ERR_NO_OPEN,							//(0x8030000F)Ry_Open must precede this operation
        ERR_OPEN_OVERFLOW,						//(0x80300010)Too many open dongles (>16)
        ERR_NOMORE,								//(0x80300011)No more dongle
        ERR_NEED_FIND,							//(0x80300012)No Find before FindNext
        ERR_DECREASE,							//(0x80300013)Decrease error
        ERR_AR_BADCOMMAND,						//(0x80300014)Arithmetic instruction error
        ERR_AR_UNKNOWN_OPCODE,					//(0x80300015)Arithmetic operator error
        ERR_AR_WRONGBEGIN,						//(0x80300016)A constant. cannot be in the first instruction
        ERR_AR_WRONG_END,						//(0x80300017)A constant. cannot be in the last instruction 
        ERR_AR_VALUEOVERFLOW,					//(0x80300018)Const number > 63

		ERR_UNKNOWN=0x8030ffff,					//(0x8030FFFF)Unknown error 

		ERR_RECEIVE_NULL=0x80300100,			//(0x80300100)Parallel port can not recieve data.
		ERR_PRNPORT_BUSY=0x80300101,			//(0x80300101)Parallel port is busy.



        //Error code for Net login

        ERR_NET_LOGINAGAIN              =0x803003E9,		//A module can only be opened once by the same process.  
        ERR_NET_NETERROR                =0x803003EA,	    //Network error.
        ERR_NET_LOGIN                   =0x803003EB,		//Too many users are logged on.
        ERR_NET_INVALIDHANDLE	        =0x803003EC,		//Invalid handle, this handle might have been closed.
        ERR_NET_BADHARDWARE		        =0x803003ED,		//Defective hardware 
        ERR_NET_REFUSE			        =0x803003EE,		//Client dll modified, service refused request.
        ERR_NET_BADSERVER	            =0x803003EF,		//Nrsvr.exe modified, service is invalid.



        //Error code for network

        ERR_INIT_SOCK					=0x803007D1,		//Error when initializing.
        ERR_NOSUCHPROTO					=0x803007D2,		//No such protocol.
        ERR_UDPSOCKCREATE				=0x803007D3,		//UDP error when creating socket.
        ERR_UDPSETBROADCAST				=0x803007D4,		//UDP error when setting broadcast.
        ERR_UDPBINDFAILED				=0x803007D5,		//UDP error when binding.
        ERR_SVRCALLBACKNULL				=0x803007D6,		//Server call back null.
        ERR_TCPSOCKCREATE				=0x803007D7,		//TCP error when creating socket.
        ERR_TCPBINDFAILED				=0x803007D8,		//TCP error when binding.
        ERR_TCPLISTENFAILED				=0x803007D9,		//TCP error when listening.
        ERR_NOSUCHSEARCH				=0x803007DA,		//No such search mode.
        ERR_UDPSEND						=0x803007DC,		//UDP error when sending.
        ERR_UDPTIMEOUT					=0x803007DD,		//UDP timeout error when waiting.
        ERR_UDPRECV						=0x803007DE,		//UDP error when receiving.
        ERR_TCPCONNECT					=0x803007DF,		//TCP error when connecting to server.
        ERR_TCPSENDTIMEOUT				=0x803007E0,		//TCP time out error when sending.
        ERR_TCPSEND						=0x803007E1,		//TCP error when sending.
        ERR_TCPRECVTIMEOUT				=0x803007E2,		//TCP time out error when receiving.
        ERR_TCPRECV						=0x803007E3,		//TCP error when receiving.
        ERR_IPXSOCKCREATE				=0x803007E4,		//IPX error when creating socket.
        ERR_IPXSETBROADCAST				=0x803007E5,		//IPX error when setting broadcast.
        ERR_IPXSEND						=0x803007E6,		//IPX error when sending data. 
        ERR_IPXRECV						=0x803007E7,		//IPX error when receiving data.
        ERR_IPXBIND						=0x803007E8,		//IPX error when binding.
        ERR_NBSRESET					=0x803007E9,		//NetBIOS error when initializing.
        ERR_NBSADDNAME					=0x803007EA,		//NetBIOS error when adding name.
        ERR_NBSSEND						=0x803007EB,		//NetBIOS error when sending data.
        ERR_NBSRECV						=0x803007EC		    //NetBIOS error when receiving data.
      
	};

5.Create NetRockey4 class by this line:

CNetRockey4Class ry4=new CNetRockey4Class();

Then you can call DoCmd routine of Netry4.

6.DoCmd usage and parameters:

(1)Define variables you will use:

uint	lp1=0,lp2=0;					//long parameters, please see manual
ushort	p1=0,p2=0,p3=0,p4=0;			//short parameters,please see manual
ushort  handle=0						//Handle of opened device.
object	obBuffer=(int)0;				//object to store byte array or string. 

(2)obBuffer usage

obBuffer only used by below commands:

Command	   		obBuffer Direction	Data type
RY_FIND			[out]			return a string stored server name.
RY_FIND_NEXT	[out]			just same as RY_FIND
RY_READ	   		[out]			Return a Byte array,stored UDZ information.
RY_WRITE   		[in]            Set to a byte array, stored UDZ information.


In other commands, you can set it to 0 by line "obBuffer=(int)0;" to improve efficiency.

