Skip to content

Instantly share code, notes, and snippets.

@juntalis
Last active December 18, 2015 15:39
Show Gist options
  • Select an option

  • Save juntalis/5805746 to your computer and use it in GitHub Desktop.

Select an option

Save juntalis/5805746 to your computer and use it in GitHub Desktop.
namespace RegUnedit.LibConfig
{
internal sealed class Module : IDisposable
{
...
private void loadFunctions(HMODULE hmod)
{
if(mapProcs != null) { throw new Exception("This should not happen."); }
mapProcs = new SignatureMap();
foreach (MemberInfo member in typeof(Signatures).GetMembers(BindingFlags.NonPublic)) {
string funcName = member.Name;
if(mapProcs.ContainsKey(funcName)) continue;
FARPROC funcPtr = Interop.GetProcAddress(hmod, funcName);
Debug.Print("{0} = 0x{1:X}", funcName, mapProcs[funcName].ToInt32());
}
}
...
}
}
using System;
using System.Runtime.InteropServices;
namespace RegUnedit.LibConfig
{
internal static class Signatures
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_set_auto_convert(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.Bool)] bool flag
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_get_auto_convert(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate ConfigErrorCode config_read_string(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string str
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate ConfigErrorCode config_read_file(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string filename
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_write_file(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)]string filename
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_set_destructor(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.FunctionPtr)] TypeDecls.config_t_destructor destructor
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_set_include_dir(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string include_dir
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_init(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_destroy(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate Int32 config_setting_get_int(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I8)]
internal delegate Int64 config_setting_get_int64(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.R8)]
internal delegate Double config_setting_get_float(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate Boolean config_setting_get_bool(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStr)]
internal delegate String config_setting_get_string(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_lookup_int(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
/*[MarshalAs(UnmanagedType.I4)]*/ ref int value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_lookup_int64(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
/*[MarshalAs(UnmanagedType.I8)]*/ ref Int64 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_lookup_float(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
/*[MarshalAs(UnmanagedType.R8)]*/ ref double value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_lookup_bool(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
/*[MarshalAs(UnmanagedType.Bool)]*/ ref bool value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_lookup_string(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
/*[MarshalAs(UnmanagedType.LPStr)]*/ ref string value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_int(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_int64(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I8)] Int64 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_float(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.R8)] Double value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_bool(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.Bool)] bool value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_string(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_set_format(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I2)] ConfigFormat format
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I2)]
internal delegate ConfigFormat config_setting_get_format(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate Int32 config_setting_get_int_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I8)]
internal delegate Int64 config_setting_get_int64_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.R8)]
internal delegate Double config_setting_get_float_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate Boolean config_setting_get_bool_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStr)]
internal delegate String config_setting_get_string_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_set_int_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx,
[MarshalAs(UnmanagedType.I4)] Int32 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_set_int64_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx,
[MarshalAs(UnmanagedType.I8)] Int64 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_set_float_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx,
[MarshalAs(UnmanagedType.R8)] Double value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_set_bool_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx,
[MarshalAs(UnmanagedType.Bool)] Boolean value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_set_string_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.I4)] int idx,
[MarshalAs(UnmanagedType.LPStr)] String value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate int config_setting_index(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
internal delegate int config_setting_length(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_get_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.U4)] uint idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_get_member(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_setting_add(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name,
[MarshalAs(UnmanagedType.I4)] ConfigValueType type
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_remove(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.LPStr)] string name
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_setting_remove_elem(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
[MarshalAs(UnmanagedType.U4)] uint idx
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
internal delegate void config_setting_set_hook(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_setting_t setting,
IntPtr hook
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_lookup(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.LPStruct)]
internal delegate TypeDecls.config_setting_t config_lookup_from(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_lookup_int(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path,
/*[MarshalAs(UnmanagedType.I4)]*/ ref Int32 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_lookup_int64(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path,
/*[MarshalAs(UnmanagedType.I8)]*/ ref Int64 value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_lookup_float(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path,
/*[MarshalAs(UnmanagedType.R8)]*/ ref Double value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_lookup_bool(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path,
/*[MarshalAs(UnmanagedType.Bool)]*/ ref Boolean value
);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.Bool)]
internal delegate bool config_lookup_string(
/*[MarshalAs(UnmanagedType.LPStruct)]*/ ref TypeDecls.config_t config,
[MarshalAs(UnmanagedType.LPStr)] string path,
/*[MarshalAs(UnmanagedType.LPStr)]*/ ref String value
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment