diff --git a/SharpPhysFS/Interop.cs b/SharpPhysFS/Interop.cs index da6328a..02d88cd 100644 --- a/SharpPhysFS/Interop.cs +++ b/SharpPhysFS/Interop.cs @@ -145,51 +145,54 @@ namespace SharpPhysFS [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void FnEnumerateFilesCallback(string s, EnumFilesCallback c, IntPtr ptr); - public static FnGetLinkedVersion PHYSFS_getLinkedVersion; - public static FnInit PHYSFS_init; - public static FnDeinit PHYSFS_deinit; - public static FnSupportedArchiveTypes PHYSFS_supportedArchiveTypes; - public static FnFreeList PHYSFS_freeList; - public static FnGetLastError PHYSFS_getLastError; - public static FnGetLastError PHYSFS_getDirSeparator; - public static FnPermitSymbolicLinks PHYSFS_permitSymbolicLinks; - public static FnSupportedArchiveTypes PHYSFS_getCdRomDirs; - public static FnGetLastError PHYSFS_getBaseDir; - public static FnGetLastError PHYSFS_getUserDir; - public static FnGetLastError PHYSFS_getWriteDir; - public static FnSetWriteDir PHYSFS_setWriteDir; - public static FnAddToSearchPath PHYSFS_addToSearchPath; - public static FnSetWriteDir PHYSFS_removeFromSearchPath; - public static FnSupportedArchiveTypes PHYSFS_getSearchPath; - public static FnSetSaneConfig PHYSFS_setSaneConfig; - public static FnSetWriteDir PHYSFS_mkdir; - public static FnSetWriteDir PHYSFS_delete; - public static FnEnumerateFiles PHYSFS_getRealDir; - public static FnEnumerateFiles PHYSFS_enumerateFiles; - public static FnSetWriteDir PHYSFS_exists; - public static FnSetWriteDir PHYSFS_isDirectory; - public static FnSetWriteDir PHYSFS_isSymbolicLink; - public static FnGetLastModTime PHYSFS_getLastModTime; - public static FnEnumerateFiles PHYSFS_openWrite; - public static FnEnumerateFiles PHYSFS_openAppend; - public static FnEnumerateFiles PHYSFS_openRead; - public static FnClose PHYSFS_close; - public static FnRead PHYSFS_read; - public static FnRead PHYSFS_write; - public static FnClose PHYSFS_eof; - public static FnTell PHYSFS_tell; - public static FnSeek PHYSFS_seek; - public static FnFileLength PHYSFS_fileLength; - public static FnSeek PHYSFS_setBuffer; - public static FnClose PHYSFS_flush; - public static FnDeinit PHYSFS_isInit; - public static FnDeinit PHYSFS_symbolicLinksPermitted; - public static FnSetAllocator PHYSFS_setAllocator; - public static FnMount PHYSFS_mount; - public static FnEnumerateFiles PHYSFS_getMountPoint; - public static FnGetCdRomDirsCallback PHYSFS_getCdRomDirsCallback; - public static FnGetCdRomDirsCallback PHYSFS_getSearchPathCallback; - public static FnEnumerateFilesCallback PHYSFS_enumerateFilesCallback; + // When the callbacks are not yet initialized, instead of throwing a + // null reference exception we explain the problem. + // I think it makes for a more graceful failure. + public static FnGetLinkedVersion PHYSFS_getLinkedVersion = (ref Version v) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnInit PHYSFS_init = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnDeinit PHYSFS_deinit = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSupportedArchiveTypes PHYSFS_supportedArchiveTypes = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnFreeList PHYSFS_freeList = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastError PHYSFS_getLastError = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastError PHYSFS_getDirSeparator = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnPermitSymbolicLinks PHYSFS_permitSymbolicLinks = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSupportedArchiveTypes PHYSFS_getCdRomDirs = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastError PHYSFS_getBaseDir = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastError PHYSFS_getUserDir = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastError PHYSFS_getWriteDir = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_setWriteDir = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnAddToSearchPath PHYSFS_addToSearchPath = (a, b) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_removeFromSearchPath = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSupportedArchiveTypes PHYSFS_getSearchPath = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetSaneConfig PHYSFS_setSaneConfig = (a, b, c, d, e) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_mkdir = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_delete = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_getRealDir = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_enumerateFiles = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_exists = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_isDirectory = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetWriteDir PHYSFS_isSymbolicLink = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetLastModTime PHYSFS_getLastModTime = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_openWrite = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_openAppend = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_openRead = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnClose PHYSFS_close = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnRead PHYSFS_read = (a, b, c, d) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnRead PHYSFS_write = (a, b, c,d ) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnClose PHYSFS_eof = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnTell PHYSFS_tell = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSeek PHYSFS_seek = (a, b) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnFileLength PHYSFS_fileLength = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSeek PHYSFS_setBuffer = (a, b) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnClose PHYSFS_flush = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnDeinit PHYSFS_isInit = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnDeinit PHYSFS_symbolicLinksPermitted = () => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnSetAllocator PHYSFS_setAllocator = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnMount PHYSFS_mount = (a, b, c) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFiles PHYSFS_getMountPoint = (a) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetCdRomDirsCallback PHYSFS_getCdRomDirsCallback = (a, b) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnGetCdRomDirsCallback PHYSFS_getSearchPathCallback = (a, b) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; + public static FnEnumerateFilesCallback PHYSFS_enumerateFilesCallback = (a, b, c) => { throw new InvalidOperationException("Callbacks not initialized yet"); }; public static void SetUpInterop() {