From: Gilles D. <dg...@us...> - 2004-11-06 02:12:27
|
Update of /cvsroot/okernel/nrtl/jayartl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2282/jayartl Modified Files: jayartl.cpp jayartl.h Log Message: + add dynamic loader features in the basic toolbox Index: jayartl.h =================================================================== RCS file: /cvsroot/okernel/nrtl/jayartl/jayartl.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** jayartl.h 6 Nov 2004 01:38:35 -0000 1.4 --- jayartl.h 6 Nov 2004 02:12:16 -0000 1.5 *************** *** 689,692 **** --- 689,710 ---- // ---------------------------------------------------------------------------- + // getErrorMessage + // + // NB: single-thread + // ---------------------------------------------------------------------------- + + jcstr_ansi JAYARTL_API getErrorMessage(void); + + // ---------------------------------------------------------------------------- + // Dynamic Module management + // + // NB: single-thread + // ---------------------------------------------------------------------------- + + jcstr_ansi JAYARTL_API dynloadOpen(jcstr_ansi aFilename,jpointer* aHandle); + jcstr_ansi JAYARTL_API dynloadClose(jpointer& aHandle); + jcstr_ansi JAYARTL_API dynloadSymbol(jpointer aHandle,jcstr_ansi aSymbol,jpointer* aPointer); + + // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Be compatible with C++ Index: jayartl.cpp =================================================================== RCS file: /cvsroot/okernel/nrtl/jayartl/jayartl.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** jayartl.cpp 6 Nov 2004 01:38:35 -0000 1.3 --- jayartl.cpp 6 Nov 2004 02:12:16 -0000 1.4 *************** *** 1051,1054 **** --- 1051,1074 ---- // ============================================================================ // ============================================================================ + // Error message + // + // NB: single-thread + // + // History + // 110x04 dgil Wrote it from scratch + // ============================================================================ + // ============================================================================ + + jcstr_ansi JAYARTL_API getErrorMessage(void) + { + static jchar msg[1024]; + + ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, ::GetLastError(), 0, msg, sizeof(msg), 0); + + return msg; + } + + // ============================================================================ + // ============================================================================ // DYNAMIC MODULE BUILT-IN SUPPORT // *************** *** 1058,1062 **** // ============================================================================ ! // ---------------------------------------------------------------------------- // ============================================================================ --- 1078,1123 ---- // ============================================================================ ! jcstr_ansi JAYARTL_API dynloadOpen(jcstr_ansi aFilename,jpointer* aHandle) ! { ! jcstr_ansi rv = NULL; ! ! UINT oldErrorMode = ::SetErrorMode(0); ! ::SetErrorMode(oldErrorMode | SEM_FAILCRITICALERRORS); ! ! *aHandle = ::LoadLibrary(aFilename); ! ::SetErrorMode(oldErrorMode); ! ! if (!*aHandle) rv = getErrorMessage(); ! ! return rv; ! } ! ! jcstr_ansi JAYARTL_API dynloadClose(jpointer& aHandle) ! { ! jcstr_ansi rv = NULL; ! ! UINT oldErrorMode = ::SetErrorMode(0); ! ::SetErrorMode(oldErrorMode | SEM_FAILCRITICALERRORS); ! ! if (::FreeLibrary(static_cast<HMODULE>(aHandle)) == 0) { ! rv = getErrorMessage(); ! } else { ! aHandle = NULL; ! } ! ::SetErrorMode(oldErrorMode); ! ! return rv; ! } ! ! jcstr_ansi JAYARTL_API dynloadSymbol(jpointer aHandle,jcstr_ansi aSymbol,jpointer* aPointer) ! { ! jcstr_ansi rv = NULL; ! ! *aPointer = ::GetProcAddress(static_cast<HMODULE>(aHandle), aSymbol); ! ! if (aPointer==NULL) rv = getErrorMessage(); ! ! return rv; ! } // ============================================================================ |