由于需求的千差萬別,IC卡讀卡器在實際使用中一般都需要經過二次開發,而軟件工程師一般都精通一種或幾種編程語言,有時候恰恰要使用不熟悉的編程語言。有時候也有一些工程師問這個IC卡讀卡器支不支持這種編程語言,其實答案是肯定的。
IC卡讀卡器SDK中一般都帶有DLL文件,實際上這個DLL文件的調用與編程語言是沒有關系的,而與編程語言有關系的就是API函數的聲明,只要我們了解相關編程語言的語法規則,基本可以用任何編程語言來開發了。
下面舉個例子來說明:
M1卡的防碰撞并選卡函數YW_AntiCollideAndSelect
函數的C語言聲明如下:int stdcall YW_AntiCollideAndSelect(int ReaderID, unsigned char MultiCardMode, unsigned char *CardMem, unsigned char *SNLen, unsigned char *SN);
delphi聲明:function YW_AntiCollideAndSelect(ReaderID: Integer;MultiCardMode:Byte;var CardMem: Byte;var SNOLen:Byte;SNO: PChar): Integer;stdcall;external 'YW60x.dll';
VB聲明:Public Declare Function YW_AntiCollideAndSelect Lib "YW60x.dll" (ByVal ReaderID As Long, ByVal MultiCardMode As Byte, ByRef CardMem As Byte, ByRef SNOLen As Byte)
C#聲明:[DllImport("YW60x.dll")]
public static extern int YW_AntiCollideAndSelect(int ReaderID,byte MultiCardMode, ref byte CardMem, ref byte SNLen, byte [] SN);
Power Builder 9 聲明:public FUNCTION long YW_AntiCollideAndSelect (long lReaderID , char MultiCardMode, ref char CardMem, ref char SNOLen, ref char SNO[]) library "YW60x.dll"
JAVA聲明:
public int YW_AntiCollideAndSelect(int ReaderID,byte MultiCardMode, Pointer CardMem, Pointer SNLen, Pointer SN)
{
int ret;
try
{
JNative fuc = new JNative("YW60x.dll", "YW_AntiCollideAndSelect");
fuc.setRetVal(Type.INT);
fuc.setParameter(0, ReaderID);
fuc.setParameter(1, MultiCardMode);
fuc.setParameter(2,CardMem);
fuc.setParameter(3,SNLen);
fuc.setParameter(4,SN);
fuc.invoke();
ret = fuc.getRetValAsInt();
}
catch(NativeException e)
{
ret = -1;
}
catch(IllegalAccessException e)
{
ret = -2;
}
return ret;
}
只要明白各種編程語言中數據類型的轉換,就可以自己將這些讀卡器SDK中的API函數轉換成自己熟悉的聲明函數。