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 |
| |