{*******************************************************} { } { Tocsg.Fasoo.Global } { } { Copyright (C) 2025 kku } { } {*******************************************************} unit Tocsg.Fasoo.Global; interface uses System.SysUtils, Winapi.Windows; const DLL_FSG_NAME = 'FasooPackagerADK_DLL.dll'; FASOO_OK = 0; // Error FASOO_INVALID_PARAM = 4; FASOO_FILE_NOT_EXIST = 20; FASOO_FILE_SIZE_ZERO = 21; // Etc FASOO_PACKAGED_FILE = 26; FASOO_NOT_PACKAGED_FILE = 29; FASOO_MARKANY_PACKAGED_FILE = 101; FASOO_FSN_PACKAGED_FILE = 103; FASOO_INCAPS_PACKAGED_FILE = 104; FASOO_WRAPSODY_PACKAGED_FILE = 105; FASOO_NX10_PACKAGED_FILE = 106; type TWorkPackager_new = function: Pointer; stdcall; TWorkPackager_clear_all = procedure(pk: Pointer); stdcall; TGetFileType_r = function(sEncPath: PAnsiChar): Integer; stdcall; TGetFileTypeW_r = function(pk: Pointer; sEncPath: PAnsiChar): Integer; stdcall; TSetOverWriteFlag = procedure(pk: Pointer; nFlag: Integer); stdcall; TGetFileHeader_r = function(pk: Pointer; sEncPath: PAnsiChar): PAnsiChar; stdcall; TGetFileHeaderW_r = function(pk: Pointer; sEncPath: PAnsiChar): PWideChar; stdcall; TDoExtract_r = function(pk: Pointer; sHomeDir, sServerID, sEncPath, sDecPath: PAnsiChar): Integer; stdcall; //function WorkPackager_new: Pointer; //procedure WorkPackager_clear_all(pk: Pointer); function InitFasooGlobalProcedure: Boolean; function GetFileType_r(sEncPath: String): Integer; function GetFileTypeW_r(sEncPath: String): Integer; procedure SetOverWriteFlag(nFlag: Integer); function GetFileHeader_r(sEncPath: String): String; function GetFileHeaderW_r(sEncPath: String): String; function DoExtract_r(sHomeDir, sServerID, sEncPath, sDecPath: String): Integer; implementation uses Tocsg.Path, Tocsg.Trace; var _pk: Pointer = nil; _fnWorkPackager_new: TWorkPackager_new = nil; _fnWorkPackager_clear_all: TWorkPackager_clear_all = nil; _fnGetFileType_r: TGetFileType_r = nil; _fnGetFileTypeW_r: TGetFileTypeW_r = nil; _fnSetOverWriteFlag: TSetOverWriteFlag = nil; _fnGetFileHeader_r: TGetFileHeader_r = nil; _fnGetFileHeaderW_r: TGetFileHeaderW_r = nil; _fnDoExtract_r: TDoExtract_r = nil; function InitFasooGlobalProcedure: Boolean; var hFs: THandle; sDllPath: String; begin if _pk = nil then begin sDllPath := GetRunExePathDir + DLL_FSG_NAME; if not FileExists(sDllPath) then sDllPath := GetRunExePathDir + 'conf\' + DLL_FSG_NAME; if FileExists(sDllPath) then begin hFs := LoadLibrary(PChar(sDllPath)); if hFs <> 0 then begin @_fnWorkPackager_new := GetProcAddress(hFs, 'WorkPackager_new'); @_fnWorkPackager_clear_all := GetProcAddress(hFs, 'WorkPackager_clear_all'); @_fnGetFileType_r := GetProcAddress(hFs, 'GetFileType_r'); @_fnGetFileTypeW_r := GetProcAddress(hFs, 'GetFileTypeW_r'); @_fnSetOverWriteFlag := GetProcAddress(hFs, 'SetOverWriteFlag'); @_fnGetFileHeader_r := GetProcAddress(hFs, 'GetFileHeader_r'); @_fnGetFileHeaderW_r := GetProcAddress(hFs, 'GetFileHeaderW_r'); @_fnDoExtract_r := GetProcAddress(hFs, 'DoExtract_r'); if Assigned(_fnWorkPackager_new) then _pk := _fnWorkPackager_new; end; end; end; Result := _pk <> nil; end; function WorkPackager_new: Pointer; begin if InitFasooGlobalProcedure and Assigned(_fnWorkPackager_new) then Result := _fnWorkPackager_new else Result := nil; end; procedure WorkPackager_clear_all(pk: Pointer); begin if pk = nil then exit; if InitFasooGlobalProcedure and Assigned(_fnWorkPackager_clear_all) then _fnWorkPackager_clear_all(pk); end; function GetFileType_r(sEncPath: String): Integer; begin if InitFasooGlobalProcedure and Assigned(_fnGetFileType_r) then Result := _fnGetFileType_r(PAnsiChar(AnsiString(sEncPath))) else Result := -1; end; function GetFileTypeW_r(sEncPath: String): Integer; begin if InitFasooGlobalProcedure and Assigned(_fnGetFileTypeW_r) then Result := _fnGetFileTypeW_r(_pk, PAnsiChar(AnsiString(sEncPath))) else Result := -1; end; // Target 파일이 존재할 경우 덮어쓰기 유무 설정 // 0: 덮어쓰지 않음, 1: 덮어씀 procedure SetOverWriteFlag(nFlag: Integer); begin if InitFasooGlobalProcedure and Assigned(_fnSetOverWriteFlag) then _fnSetOverWriteFlag(_pk, nFlag); end; function GetFileHeader_r(sEncPath: String): String; begin if InitFasooGlobalProcedure and Assigned(_fnGetFileHeader_r) then Result := AnsiString(_fnGetFileHeader_r(_pk, PAnsiChar(AnsiString(sEncPath)))) else Result := ''; end; function GetFileHeaderW_r(sEncPath: String): String; begin if InitFasooGlobalProcedure and Assigned(_fnGetFileHeaderW_r) then Result := _fnGetFileHeaderW_r(_pk, PAnsiChar(AnsiString(sEncPath))) else Result := ''; end; function DoExtract_r(sHomeDir, sServerID, sEncPath, sDecPath: String): Integer; begin if InitFasooGlobalProcedure and Assigned(_fnDoExtract_r) then Result := _fnDoExtract_r(_pk, PAnsiChar(AnsiString(sHomeDir)), PAnsiChar(AnsiString(sServerID)), PAnsiChar(AnsiString(sEncPath)), PAnsiChar(AnsiString(sDecPath))) else Result := -1; end; end. finalization if (_pk <> nil) and Assigned(WorkPackager_clear_all) then begin WorkPackager_clear_all(_pk); _pk := nil; end;