Я хочу разрешить адреса функций, подобных тем, которые есть в C-stdlib, например, malloc
во время выполнения, из кода .NET (поэтому я могу использовать машинный код JIT, который вызывает эти адреса для моей виртуальной машины).Я считаю, что я должен использовать LoadLibrary
и GetProcAddress
, поставляя kernel32.dll, но это не работает.Используя интерактивный F #, я получаю:
> [<DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)>]
extern IntPtr LoadLibrary(string fileName);;
val LoadLibrary : string -> IntPtr
> [<DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)>]
extern uint32 GetProcAddress(IntPtr hModule, string fn);;
val GetProcAddress : IntPtr * string -> uint32
> let kernel32 = LoadLibrary @"kernel32.dll";;
val kernel32 : IntPtr = 1993146368n
> let malloc = GetProcAddress(kernel32, "malloc");;
val malloc : uint32 = 0u
Таким образом, похоже, что получен дескриптор библиотеки DLL, но при попытке решить malloc
возвращается указатель NULL.
Как мне это сделать