aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediaplugin/src/base/UPlatform.pas19
-rw-r--r--mediaplugin/src/base/UPlatformWindows.pas10
-rw-r--r--mediaplugin/src/media/UMediaPlugin.pas6
3 files changed, 34 insertions, 1 deletions
diff --git a/mediaplugin/src/base/UPlatform.pas b/mediaplugin/src/base/UPlatform.pas
index 6d884979..4239e21a 100644
--- a/mediaplugin/src/base/UPlatform.pas
+++ b/mediaplugin/src/base/UPlatform.pas
@@ -51,9 +51,11 @@ type
procedure Halt; virtual;
function GetLogPath: IPath; virtual; abstract;
- function GetMusicPath: IPath; virtual; abstract;
+ function GetMusicPath: IPath; virtual;
function GetGameSharedPath: IPath; virtual; abstract;
function GetGameUserPath: IPath; virtual; abstract;
+
+ procedure AddLibrarySearchPath(const DLLPath: IPath); virtual;
end;
function Platform(): TPlatform;
@@ -113,6 +115,21 @@ begin
Result := ExecDir.GetAbsolutePath();
end;
+{**
+ * Dummy implementation (Mac specific)
+ *}
+function TPlatform.GetMusicPath: IPath;
+begin
+ Result := PATH_NONE;
+end;
+
+{**
+ * Dummy implementation (Windows specific)
+ *}
+procedure TPlatform.AddLibrarySearchPath(const DLLPath: IPath);
+begin
+end;
+
(**
* Default TerminateIfAlreadyRunning() implementation
*)
diff --git a/mediaplugin/src/base/UPlatformWindows.pas b/mediaplugin/src/base/UPlatformWindows.pas
index 91d3cce6..a0059687 100644
--- a/mediaplugin/src/base/UPlatformWindows.pas
+++ b/mediaplugin/src/base/UPlatformWindows.pas
@@ -51,6 +51,7 @@ type
public
procedure Init; override;
function TerminateIfAlreadyRunning(var WndTitle: String): Boolean; override;
+ procedure AddLibrarySearchPath(const DLLPath: IPath); override;
function GetLogPath: IPath; override;
function GetGameSharedPath: IPath; override;
@@ -63,6 +64,7 @@ uses
SysUtils,
ShlObj,
Windows,
+ UPathUtils,
UConfig;
procedure TPlatformWindows.Init;
@@ -206,4 +208,12 @@ begin
Result := GetSpecialPath(CSIDL_APPDATA).Append('ultrastardx', pdAppend);
end;
+function SetDllDirectory(lpPathName: PWideChar): Bool; stdcall;
+ external kernel32 name 'SetDllDirectoryW';
+
+procedure TPlatformWindows.AddLibrarySearchPath(const DLLPath: IPath);
+begin
+ SetDllDirectory(PWideChar(DLLPath.ToWide()));
+end;
+
end.
diff --git a/mediaplugin/src/media/UMediaPlugin.pas b/mediaplugin/src/media/UMediaPlugin.pas
index 4baa778a..8632b9df 100644
--- a/mediaplugin/src/media/UMediaPlugin.pas
+++ b/mediaplugin/src/media/UMediaPlugin.pas
@@ -168,6 +168,7 @@ uses
UPath,
UPathUtils,
ULog,
+ UPlatform,
UAudioDecoderPlugin,
UAudioConverterPlugin,
UVideoDecoderPlugin;
@@ -434,6 +435,11 @@ const
begin
MediaPlugins := TList.Create;
+ {$IFDEF MSWINDOWS}
+ // add an additional dll search path for plugin dependencies
+ Platform.AddLibrarySearchPath(MediaPluginPath.Append('deps'));
+ {$ENDIF}
+
LibPath := MediaPluginPath.Append('*' + ModuleExt);
Iter := FileSystem.FileFind(LibPath, faAnyFile);
while (Iter.HasNext) do