瀏覽代碼

Fixed AppFile and AppDir for DLLs. Closes #100.
In the DLL, the values for AppFile and AppDir will relate to the DLL location itself.

woollybah 6 年之前
父節點
當前提交
c164b06afc
共有 2 個文件被更改,包括 31 次插入17 次删除
  1. 6 2
      appstub.mod/appstub.win32.c
  2. 25 15
      blitz.mod/blitz_app.c

+ 6 - 2
appstub.mod/appstub.win32.c

@@ -39,7 +39,7 @@ static LONG WINAPI unhandledExceptionFilter( EXCEPTION_POINTERS *xinfo ){
 
 #endif
 
-void bbLibStartup();
+void bbLibStartup(wchar_t * buf);
 
 void __bb_brl_appstub_appstub();
 
@@ -58,14 +58,18 @@ int main( int argc,char *argv[] ){
 	return 0;
 }
 
+wchar_t bbLibFile[MAX_PATH];
+
 BOOL WINAPI DllMain( HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved ){
 
 	if( fdwReason!=DLL_PROCESS_ATTACH ) return 1;
 
+	GetModuleFileNameW( hinstDLL,bbLibFile,MAX_PATH );
+
 	return 1;
 }
 
 void bbLibInit() {
-	bbLibStartup();
+	bbLibStartup(bbLibFile);
 	__bb_brl_appstub_appstub();
 }

+ 25 - 15
blitz.mod/blitz_app.c

@@ -124,6 +124,23 @@ int bbIsMainThread(){
 	return GetCurrentThreadId()==_mainThread;
 }
 
+void bbGetAppFileDir(wchar_t * buf) {
+	int e = 0;
+	for(int i=0;buf[i];++i ){
+		if( buf[i]=='\\' ) buf[i]='/';
+		if( buf[i]=='/' ) e=i;
+	}
+
+	bbAppFile=bbStringFromWString( buf );
+
+	if( e ){
+		if( buf[e-1]==':' ) ++e;
+		bbAppDir=bbStringFromShorts( buf,e );
+	}else{
+		bbAppDir=&bbEmptyString;
+	}
+}
+
 #elif __linux
 
 #include <unistd.h>
@@ -290,6 +307,7 @@ int bbIsMainThread(){
 
 #endif
 
+
 void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
 
 	int i,k;
@@ -324,21 +342,9 @@ void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
 			if( buf[i]=='\\' ) buf[i]='/';
 		}
 		bbLaunchDir=bbStringFromWString( buf );
-		
-		GetModuleFileNameW( GetModuleHandleW(0),buf,MAX_PATH );
-		for( i=0;buf[i];++i ){
-			if( buf[i]=='\\' ) buf[i]='/';
-			if( buf[i]=='/' ) e=i;
-		}
-		bbAppFile=bbStringFromWString( buf );
-
-		if( e ){
-			if( buf[e-1]==':' ) ++e;
-			bbAppDir=bbStringFromShorts( buf,e );
-		}else{
-			bbAppDir=&bbEmptyString;
-		}
 
+		GetModuleFileNameW( GetModuleHandleW(0),buf,MAX_PATH );
+		bbGetAppFileDir(buf);
 		_wchdir( bbTmpWString( bbAppDir ) );
 		
 	}else{
@@ -469,10 +475,14 @@ void bbStartup( int argc,char *argv[],void *dummy1,void *dummy2 ){
 	startup();
 }
 
-void bbLibStartup(){
+#if _WIN32
+void bbLibStartup(wchar_t * buf){
 
 	bbGCStartup();
 	bbThreadStartup();
 
+	bbGetAppFileDir(buf);
+
 	startup();
 }
+#endif