--- /dev/null
+// MllMain.cpp : DLL \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B\r
+//\r
+#include <winscard.h>
+#include <stdio.h>\r
+#include "CasProxy.h"\r
+#include "W2L.h"\r
+#ifndef SCARD_AUTOALLOCATE
+ #define SCARD_AUTOALLOCATE (DWORD)(-1) /**< see SCardFreeMemory() */
+#endif\r
+
+//////////////////////////////////////////////////////////////////////\r
+// WinSCard\83t\83b\83N\r
+//////////////////////////////////////////////////////////////////////\r
+LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)\r
+{\r
+ // \83v\83\8d\83L\83V\83C\83\93\83X\83^\83\93\83X\90¶\90¬\r
+ CCasProxy *pCasProxy = new CCasProxy();\r
+
+ // \83T\81[\83o\82É\90Ú\91±\r
+ if(!pCasProxy->Connect()){\r
+ delete pCasProxy;\r
+ *phCard = NULL;\r
+ return SCARD_E_READER_UNAVAILABLE;\r
+ }
+\r
+ // \83n\83\93\83h\83\8b\82É\96\84\82ß\8d\9e\82Þ\r
+ *phCard = reinterpret_cast<SCARDHANDLE>(pCasProxy);\r
+ if(pdwActiveProtocol)*pdwActiveProtocol = SCARD_PROTOCOL_T1;\r
+\r
+ return SCARD_S_SUCCESS;\r
+}\r
+\r
+LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)\r
+{\r
+ // \83T\81[\83o\82©\82ç\90Ø\92f\r
+ CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);\r
+ if(pCasProxy)delete pCasProxy;\r
+\r
+ return SCARD_S_SUCCESS;\r
+}\r
+\r
+LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)\r
+{
+ return SCARD_S_SUCCESS;\r
+}\r
+\r
+LONG SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)\r
+{\r
+ return SCARD_S_SUCCESS;\r
+}\r
+\r
+LONG SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)\r
+{\r
+ const char szReaderName[] = "BonCasLink Proxy Card Reader\0";\r
+\r
+ if(pcchReaders){\r
+ if((*pcchReaders == SCARD_AUTOALLOCATE) && mszReaders){\r
+ *((LPCSTR *)mszReaders) = szReaderName; \r
+ return SCARD_S_SUCCESS;\r
+ }\r
+ else{\r
+ *pcchReaders = sizeof(szReaderName);\r
+ }\r
+ }\r
+\r
+ if(mszReaders) memcpy(mszReaders, szReaderName, sizeof(szReaderName));\r
+\r
+ return SCARD_S_SUCCESS;\r
+}\r
+\r
+LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)\r
+{\r
+ // \83T\81[\83o\82É\83\8a\83N\83G\83X\83g\91\97\8eó\90M\r
+ CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);\r
+ if(!pCasProxy)return SCARD_E_READER_UNAVAILABLE;\r
+\r
+ DWORD dwRecvLen = pCasProxy->TransmitCommand(pbSendBuffer, cbSendLength, pbRecvBuffer);\r
+ if(pcbRecvLength)*pcbRecvLength = dwRecvLen;\r
+\r
+ return (dwRecvLen)? SCARD_S_SUCCESS : SCARD_E_TIMEOUT;\r
+}\r
+\r
+LONG SCardReleaseContext(SCARDCONTEXT hContext)\r
+{\r
+ return SCARD_S_SUCCESS;\r
+}\r
+