Hi, I am looking to port a MSVC++ driver to Linux. The recommended approach, to convert the Makefile and compile it didn't work for me, so I am trying to compile seperate cpp.files by implementing the winapi functions I need in a seperate linuxapi.cpp
There are about 30 functions I have to port at the moment, and some of them are easier than others. Basically they are part of the DLL (so), thread/event/mutex, File*Find apis, with some miscellaneous ones. I think I could do myself a favor by asking if the MSVC++ code could use libpthread instead of the MS threads, so I'm not too worried about those, and simulating DLL with the dl* api seems easy enough as well. Still, there are problems with Find*File, FindClose, GetModuleFileName and so on. I'm not too familiar with winapi myself, because I learn C/C++ in a college environment, where most programming assignments are geared towards Linux. Can anyone comment sensibly on this? If you are of the opinion that I should just rewrite the app from scratch, I agree in part, but the assignment is to leave as much of the original code as it is, apart from isolated cases where g++ can't quite follow the MSVC++ compiler. At the end of the email is a list of prototypes included, that I ripped from winbase.h Looking forward to read your thoughts on this matter, Regards, Arjen Verweij Here is the list: DWORD GetModuleFileName(HMODULE, LPTSTR, DWORD); HANDLE FindFirstFile(LPCSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData); BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData); BOOL FindClose(HANDLE hFindFile); BOOL SetEvent(HANDLE hEvent); FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName); HMODULE LoadLibrary(LPCSTR lpLibFileName); BOOL FreeLibrary(HMODULE hLibModule); HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName); DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds); BOOL CloseHandle(HANDLE hObject); BOOL ReleaseMutex(HANDLE hMutex); DWORD GetCurrentProcessId(VOID); HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName); VOID Sleep(DWORD dwMilliseconds); BOOL ResetEvent(HANDLE hEvent); DWORD _beginthread(void(__cdecl *start_address) (void*), unsigned, void*); VOID OutputDebugString(LPCSTR lpOutputString); DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); void _endthread(void); BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount); HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName); BOOL UnmapViewOfFile(LPCVOID lpBaseAddress); HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); DWORD GetLastError(VOID); LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap);