最近一周做了乙個關於倉庫管理,揀貨任務分配的模組,其中涉及到刷卡自動列印領取任務的功能點。
技術點:
c#呼叫c++、delphi的動態鏈結庫。動態鏈結庫的呼叫方法不同。效果也不相同。
dll位置:執行程式根目錄下面
例:第一種:
[dllimport("shuipiao1.dll", entrypoint = "checkticket", charset = charset.ansi, callingconvention = callingconvention.stdcall)]
第二種:
[dllimport("mifsdll.dll", charset = charset.ansi)]
第三種:
[dllimport("mifsdll.dll", charset = charset.ansi, entrypoint = "mifs_anticoll", callingconvention = callingconvention.cdecl)]
實際案例:
#region 呼叫dll介面方法// 開啟串列埠 opencomm(char *commport,dword baud)
[dllimport("mifsdll.dll", charset = charset.ansi)]
// [dllimport("mifsdll.dll", entrypoint = "opencomm", setlasterror = true,
//charset = charset.auto, exactspelling = false,
//callingconvention = callingconvention.stdcall)]
//開啟串列埠
public static extern int16 opencomm(string port, long baud);
//裝載金鑰 winapi mifs_load_key(uchar _mode, uchar _secnr, uchar *key)
[dllimport("mifsdll.dll", charset = charset.ansi)]
//開啟串列埠
public static extern int16 mifs_load_key(uint mode, uint secnr, byte key);
[dllimport("mifsdll.dll", charset = charset.ansi)]
//mifs_request_2 尋卡
public static extern int16 mifs_request_2(long mode);
[dllimport("mifsdll.dll", charset = charset.ansi, entrypoint = "mifs_anticoll", callingconvention = callingconvention.cdecl)]
public static extern int16 mifs_anticoll(uint bcnt, byte port);
//mifs_select(uchar *_snr)
[dllimport("mifsdll.dll", charset = charset.ansi, entrypoint = "mifs_select", callingconvention = callingconvention.cdecl)]
//選卡
public static extern int16 mifs_select(byte port);
//mifs_authentication(uchar auth_mode,uchar *snr,uchar key_sector)
[dllimport("mifsdll.dll", charset = charset.ansi)]
//認證秘鑰
public static extern int16 mifs_authentication(uint mode, byte snr, uint key);
//讀卡資料 mifs_read(uchar _adr, uchar *_data) 出口函式16byte
[dllimport("mifsdll.dll", charset = charset.ansi, entrypoint = "mifs_read", callingconvention = callingconvention.cdecl)]
public static extern int16 mifs_read(uint adr, byte data);
//int winapi mifs_write(uchar _adr, uchar *_data) 寫員工號
[dllimport("mifsdll.dll", charset = charset.ansi)]
public static extern int16 mifs_write(uint adr, byte data);
// 蜂鳴 mifs_buzzer(uchar bb)
[dllimport("mifsdll.dll", entrypoint = "mifs_buzzer", setlasterror = true,
charset = charset.auto, exactspelling = false,
callingconvention = callingconvention.stdcall)]
public static extern void mifs_buzzer(int bb);
#endregion
呼叫動態鏈結庫(dll)
步驟 1.tools options projects and solutions vc directories分別在包含檔案,庫檔案填加了路徑 這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.若不設定,編譯報錯 無法開啟 檔案 2.project properties c c gen...
動態鏈結庫DLL
函式和資料被編譯進乙個二進位制檔案 通常擴充套件名為.lib 靜態庫 在使用靜態庫的情況下,在編譯鏈結可執行檔案時,鏈結器從庫中複製這些函式和資料並把它們和應用程式的其它模組組合起來建立最終的可執行檔案 exe檔案 在多個同樣的程式執行時,系統保留了許多重複的 副本,造成記憶體資源浪費。動態庫 使用...
C 呼叫C 動態鏈結庫dll
在過程中發現兩種方法解決問題 一種是非託管c 建立的dll庫,需要用靜態方法呼叫。這種方法無法在c 的reference中直接引用,而是要用靜態呼叫的方法,其他部落格已經介紹的很詳盡,唯一需要補充的是,c 檔案需要先 usingsystem.runtime.interopservices 之後才可以...