00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <windows.h>
00026 #include <stdlib.h>
00027 #include "ltdl_win32.h"
00028
00029
00030
00031 lt_dlhandle lastHandle=NULL;
00032
00033
00034 char errortext[512];
00035
00036
00037
00038 void lt_dlinit( void )
00039 {
00040 lastHandle=NULL;
00041 }
00042
00043
00044
00045 void lt_dlexit( void )
00046 {
00047 lt_dlhandle prev;
00048
00049 while( lastHandle!=NULL ) {
00050 if( lastHandle->hinstLib )
00051 FreeLibrary( lastHandle->hinstLib );
00052 prev=lastHandle->previousHandle;
00053 free( lastHandle );
00054 lastHandle=prev;
00055 }
00056 }
00057
00058
00059
00060
00061
00062 lt_dlhandle lt_dlopenext( char* dllname )
00063 {
00064 lt_dlhandle dlhandle=malloc( sizeof(struct __dlhandle) );
00065 memset( dlhandle, '\0', sizeof(struct __dlhandle) );
00066
00067 dlhandle->hinstLib = LoadLibrary( dllname );
00068 if( !dlhandle->hinstLib ) {
00069 free( dlhandle );
00070 return NULL;
00071 }
00072
00073 dlhandle->previousHandle = lastHandle;
00074 lastHandle = dlhandle;
00075
00076 return dlhandle;
00077 }
00078
00079
00080
00081 const char* lt_dlerror()
00082 {
00083 strncpy( errortext, "No error information", 512 );
00084
00085 return errortext;
00086 }
00087
00088
00089
00090 void* lt_dlsym( lt_dlhandle dlhandle, const char* symbol )
00091 {
00092 if( dlhandle->hinstLib ) {
00093 #ifdef __BORLANDC__
00094 unsigned int bufferLength = strlen(symbol)+2;
00095 char* buffer = (char*)malloc(bufferLength);
00096 void* retPointer;
00097
00098 buffer[0]='_';
00099 strncpy( &buffer[1], symbol, bufferLength-2 );
00100 buffer[bufferLength-1]='\0';
00101 retPointer=GetProcAddress( dlhandle->hinstLib, buffer );
00102 free(buffer);
00103 return retPointer;
00104 #else
00105 return GetProcAddress( dlhandle->hinstLib, symbol );
00106 #endif
00107 } else
00108 return NULL;
00109
00110 }