DllInterface Class Reference

#include <dll.h>

Detailed Description

Interface for managing dynamic libraries (load, query symbols, ...).

Public Member Functions

MAXON_METHOD Result< void > Unload ()
 
MAXON_METHOD Result< void > Release ()
 
MAXON_METHOD Result< void * > FindSymbolPointer (const CString &symbol) const
 
template<typename T >
MAXON_FUNCTION Result< T > FindSymbol (const CString &symbol) const
 
MAXON_METHOD Result< Binary * > GetBinary () const
 
MAXON_METHOD Result< void > UpdateSymbolData ()
 
MAXON_METHOD Result< UrlGetPath () const
 

Static Public Member Functions

static MAXON_METHOD Result< DllRef > LoadDll (const Url &fileName, Bool registerDll, Bool requireCoreModule, Int systemDependentFlags=-1)
 
static MAXON_METHOD Result< DllRef > GetModule (const void *handle, UInt processId)
 
static MAXON_METHOD Result< void > AddDllPath (const Url &dllDirectory)
 
static MAXON_METHOD Result< void > RemoveDllPath (const Url &dllDirectory)
 
static MAXON_METHOD Result< void > GetLoadedDllsDeprecated (const ValueReceiver< const DllRef & > &dlls)
 
static MAXON_METHOD Result< BoolGetLoadedDlls (const ValueReceiver< const DllRef & > &dlls)
 

Private Member Functions

 MAXON_INTERFACE_NONVIRTUAL (DllInterface, MAXON_REFERENCE_NORMAL, "net.maxon.interface.dll", MAXON_IMPLEMENTATION_MODULE("net.maxon.kernel"))
 

Member Function Documentation

◆ MAXON_INTERFACE_NONVIRTUAL()

MAXON_INTERFACE_NONVIRTUAL ( DllInterface  ,
MAXON_REFERENCE_NORMAL  ,
"net.maxon.interface.dll"  ,
MAXON_IMPLEMENTATION_MODULE("net.maxon.kernel")   
)
private

◆ LoadDll()

static MAXON_METHOD Result<DllRef> LoadDll ( const Url fileName,
Bool  registerDll,
Bool  requireCoreModule,
Int  systemDependentFlags = -1 
)
static

Loads the dll into memory. When the last reference disappears the dll will be unloaded automatically.

Parameters
[in]fileNameFilename of the dll to load.
[in]registerDllIf true the library will automatically be unloaded before the current module is unloaded. Make sure not to store the reference permanently (otherwise this can't work).
[in]requireCoreModuleSet this to false to load foreign libraries. Otherwise C4D specific symbols must be present.
[in]systemDependentFlagsFlags passed to the underlying OS function which opens the library. LoadLibrary on Windows, and dlopen on macOS and Linux.
Returns
Returns the dll reference or an error.

◆ GetModule()

static MAXON_METHOD Result<DllRef> GetModule ( const void *  handle,
UInt  processId 
)
static

Creates a DllRef from an already loaded module. The dll will not be unloaded when the reference is deleted.

Parameters
[in]handleHandle to the module. This is a HMODULE on Windows and a void* on Linux and OSX.
[in]processIdId of the process that owns the dll.
Returns
Returns the dll reference or an error.

◆ AddDllPath()

static MAXON_METHOD Result<void> AddDllPath ( const Url dllDirectory)
static

Adds a directory to the search path used to locate DLLs for the application (Windows only).

Parameters
[in]dllDirectoryThe directory to be added to the search path.
Returns
OK on success.

◆ RemoveDllPath()

static MAXON_METHOD Result<void> RemoveDllPath ( const Url dllDirectory)
static

Removes a directory from the library search path (Windows only).

Parameters
[in]dllDirectoryThe directory to be removed from the search path.
Returns
OK on success.

◆ GetLoadedDllsDeprecated()

static MAXON_METHOD Result<void> GetLoadedDllsDeprecated ( const ValueReceiver< const DllRef & > &  dlls)
static

Returns all loaded dlls which were loaded through DllInterface. @MAXON_ANNOTATION{methodId="GetLoadedDllsDeprecated@5a77b521b3ce6f53"->"GetLoadedDlls@5a77b521b3ce6f53"}

◆ GetLoadedDlls()

static MAXON_METHOD Result<Bool> GetLoadedDlls ( const ValueReceiver< const DllRef & > &  dlls)
static

Returns all loaded dlls which were loaded through DllInterface.

Returns
Result of the value receiver (true/false).

◆ Unload()

MAXON_METHOD Result<void> Unload ( )

Unloads the dll from memory.

Returns
OK on success.

◆ Release()

MAXON_METHOD Result<void> Release ( )

Detaches this object from the system handle so that the dll will be unloaded when the application quits.

Returns
OK on success. @MAXON_ANNOTATION{default=OK}

◆ FindSymbolPointer()

MAXON_METHOD Result<void*> FindSymbolPointer ( const CString symbol) const

Looks for a symbol and returns a generic pointer to it.

Parameters
[in]symbolSymbol to find in the dll.
Returns
Returns pointer to the symbol in the dll.

◆ FindSymbol()

MAXON_FUNCTION Result<T> FindSymbol ( const CString symbol) const

Looks for a symbol and returns the requested type (via cast).

Parameters
[in]symbolSymbol to find in the dll.
Returns
Returns pointer to the symbol in the dll and casts it to the expected type.

◆ GetBinary()

MAXON_METHOD Result<Binary*> GetBinary ( ) const

◆ UpdateSymbolData()

MAXON_METHOD Result<void> UpdateSymbolData ( )

Loads or updates symbol data for dynamic libraries. Depending on the OS (Windows) this has to be triggered manually after all modules have been loaded.

◆ GetPath()

MAXON_METHOD Result<Url> GetPath ( ) const

Returns the location (Url) of the dll.

Returns
Url of the loaded dll.