pc端環境搭建
1.建立一個win32 dll項目。把sense4.h,sense4.lib放到項目目錄下面一份。並且添加到項目中。(vc6中有個項目設定,能指定.h,.lib檔案的目錄。vs2005不知道把這個選項改到什麼地方去了,算了,不找了,直接copy一份算了。^_^)
2.添加一個.def檔案
LIBRARY "SenseLockVC"
DESCRIPTION 'BeQuick'
EXPORTS
SenseLock_Hash @1
3.pc端vc代碼
// SenseLockVC.cpp : 定義 DLL 應用程式的進入點。<br />//SenseLock調用dll,封裝SenseLock的調用函數,供C#調用</p><p>#include "stdafx.h"<br />#include <stdlib.h><br />#include <conio.h><br />#include "sense4.h"</p><p>#ifdef _MANAGED<br />#pragma managed(push, off)<br />#endif</p><p>//dll的入口函數<br />BOOL APIENTRY DllMain( HMODULE hModule,<br /> DWORD ul_reason_for_call,<br /> LPVOID lpReserved<br /> )<br />{<br /> switch(ul_reason_for_call)<br /> {<br /> case DLL_PROCESS_ATTACH:<br /> break;<br /> case DLL_THREAD_ATTACH:<br /> break;<br /> case DLL_THREAD_DETACH:<br /> break;<br /> case DLL_PROCESS_DETACH:<br /> break;<br /> }<br /> return TRUE;<br />}<br />/*************************************************************************<br />*功能:調用SenseLock裝置的函數<br />*輸入參數:<br />*char *fid : 要調用的SenseLock程式檔案名稱<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int call_sense4(char *fid, BYTE* inbuffer, DWORD inlen,BYTE* outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> /* See remarks for details.*/<br /> SENSE4_CONTEXT ctx = {0};</p><p> SENSE4_CONTEXT *pctx = NULL;<br /> DWORD size = 0;<br /> DWORD ret = 0;</p><p> /*枚舉裝置*/<br /> S4Enum(pctx, &size);<br /> if (size == 0)<br /> {<br /> return 1;<br /> }</p><p> /*申請記憶體*/<br /> pctx = (SENSE4_CONTEXT *)malloc(size);<br /> if (pctx == NULL)<br /> {<br /> return 2;<br /> }<br /> ret = S4Enum(pctx, &size);<br /> if (ret != S4_SUCCESS)<br /> {<br /> free(pctx);<br /> return 3;<br /> }<br /> memcpy(&ctx, pctx, sizeof(SENSE4_CONTEXT));<br /> free(pctx);<br /> pctx = NULL;</p><p> /*開啟裝置*/<br /> ret = S4Open(&ctx);<br /> if (ret != S4_SUCCESS)<br /> {<br /> return 4;<br /> }</p><p> /*訪問目錄*/<br /> ret = S4ChangeDir(&ctx, "//");<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 5;<br /> }<br /> /*password<br /> 驗證密碼*/<br /> BYTE b[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};<br /> ret = S4VerifyPin(&ctx, b, 8, S4_USER_PIN);<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 6;<br /> }</p><p> /*執行SenseLock程式*/<br /> ret = S4Execute(&ctx, fid, inbuffer, inlen, outbuffer, outlen, outSize);<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 7;<br /> }</p><p> /*關閉裝置*/<br /> S4Close(&ctx);<br /> return 0;<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行Hash運算<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_Hash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d001", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行TDES運算<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_TDES(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d002", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行加密運算,先TDES,再Hash<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_TDESHash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d003", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>#ifdef _MANAGED<br />#pragma managed(pop)<br />#endif</p><p>