#include "std.h" PLIBRARY_DESCRIPTOR lhclLoadLibrary(PCWSTR pcszPathName) { PLIBRARY_DESCRIPTOR pResult = malloc( sizeof(LIBRARY_DESCRIPTOR)); if (NULL==pResult) { goto NoStructure; } pResult->m_hModule = LoadLibraryW( pcszPathName); if (NULL==pResult->m_hModule) { goto NoLibrary; } pResult->m_fpOpen = (PLHC_OPENPROC)GetProcAddress( pResult->m_hModule, "lhcOpen"); if (NULL==pResult->m_fpOpen) { goto Error; } pResult->m_fpClose = (PLHC_CLOSEPROC)GetProcAddress( pResult->m_hModule, "lhcClose"); if (NULL==pResult->m_fpClose) { goto Error; } pResult->m_fpRead = (PLHC_READPROC)GetProcAddress( pResult->m_hModule, "lhcRead"); if (NULL==pResult->m_fpRead) { goto Error; } pResult->m_fpWrite = (PLHC_WRITEPROC)GetProcAddress( pResult->m_hModule, "lhcWrite"); if (NULL==pResult->m_fpWrite) { goto Error; } pResult->m_fpGetLibraryName = (PLHC_GETLIBRARYNAMEPROC)GetProcAddress( pResult->m_hModule, "lhcGetLibraryName"); if (NULL==pResult->m_fpGetLibraryName) { goto Error; } return pResult; Error: FreeLibrary( pResult->m_hModule); NoLibrary: free( pResult); NoStructure: return FALSE; } void lhclFreeLibrary(PLIBRARY_DESCRIPTOR pLibrary) { if (pLibrary!=NULL) { if (pLibrary->m_hModule!=NULL) { FreeLibrary( pLibrary->m_hModule); } free( pLibrary); } } PLHCOBJECT_DESCRIPTOR lhclOpen( PLIBRARY_DESCRIPTOR pLibrary, PCWSTR pcszPortSpec) { return pLibrary->m_fpOpen( pcszPortSpec); } BOOL lhclRead( PLIBRARY_DESCRIPTOR pLibrary, PLHCOBJECT_DESCRIPTOR pObject, PVOID pBuffer, DWORD dwBufferSize, PDWORD pdwBytesRead) { return pLibrary->m_fpRead( pObject, pBuffer, dwBufferSize, pdwBytesRead); } BOOL lhclWrite( PLIBRARY_DESCRIPTOR pLibrary, PLHCOBJECT_DESCRIPTOR pObject, PVOID pBuffer, DWORD dwBufferSize) { return pLibrary->m_fpWrite( pObject, pBuffer, dwBufferSize); } BOOL lhclClose( PLIBRARY_DESCRIPTOR pLibrary, PLHCOBJECT_DESCRIPTOR pObject) { return pLibrary->m_fpClose( pObject); } DWORD lhclGetLibraryName( PLIBRARY_DESCRIPTOR pLibrary, PWSTR pszBuffer, DWORD dwBufferSize) { return pLibrary->m_fpGetLibraryName( pszBuffer, dwBufferSize); }