Merhabalar, geçenlerde satın aldıgımız masaüstü RFID okuyucu ve yazıcısını hastane yazılımında SDK sını kullanmak istedigimizde, SDK içindeki API nin DLL inin C ile yazıldıgını fark ettik. Ve Visual Studio ya normal DLL i ekler gibi ekleyemedik.

Bende paylaşmak istedim, bu tarz başka dillerle yazılmış DLL leri P/Invoke ile kullanıyoruz projelerimizde. Bu tarz Win32 DLL lerini P/Invoke ile çagırabiliriz.

Bizim kullandıgımız masa üstü RFID okuyucusunun modeli TKP705 idi. Ama içerisinde bir Serial Reader var.  Windows cihazı HJSRFID-7640 ve HJSRFID-S7640 olarak tanımakta. Seri çevirici üzerinden USB RFID cihazı ile haberleşiliyor.

SDK içerisinden çıkan CVAPIV01.DLL C dili ile yazılmış. .Net projenizde kullanmak için DLL ile Bin klasorunun altına kopyalayıp.

        [DllImport("CVAPIV01.dll", CharSet = CharSet.Ansi)]

Deyip altınada kullanmak istedigimiz methodları tanımlıyoruz tek tek,

 

        public static extern int GetVersionAPI(StringBuilder VersionAPI);
        public static extern int OpenComm(StringBuilder Com, int Baudrate); 
...

Burada dikkat etmeniz gereken Win32 type lerini C# nasıl tanımlayacagınızı bilmeniz. Ve API içinde methodları parametreleri ile bilmeniz.Yukarıdaki 2 method için API nin SDK dökümanınında ( S795X-RS232 ) 

Şu şekilde ifade edilmişti :

int GetVersionAPI( char *VersionAPI )
int OpenComm(char *Com, int Baudrate)


kritik nokta türler, işte türlerin  listesi


Win32 Types Specification CLR Type
char, INT8, SBYTE, CHAR* 8-bit signed integer System.SByte
short, short int, INT16, SHORT 16-bit signed integer System.Int16
int, long, long int, INT32, LONG32, BOOL* , INT 32-bit signed integer System.Int32
__int64, INT64, LONGLONG 64-bit signed integer System.Int64
unsigned char, UINT8, UCHAR* , BYTE 8-bit unsigned integer System.Byte
unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR* , __wchar_t 16-bit unsigned integer System.UInt16
unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT 32-bit unsigned integer System.UInt32
unsigned __int64, UINT64, DWORDLONG, ULONGLONG 64-bit unsigned integer System.UInt64
float, FLOAT Single-precision floating point System.Single
double, long double, DOUBLE Double-precision floating point System.Double