Как через GetProcAddress вызвать функцию из dll
проблема в том что возникает ошибка при вызове функции Main

Startup.cs или по другому файл в котором я создаю фоновый процесс
public void ConfigureServices(IServiceCollection services)
{
services.AddHostedService<Service>();
}
Service.cs, в нем собственно вся логика
using Microsoft.Extensions.Hosting;
using System;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;
namespace TestDll
{
public static class NativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[ResourceExposure(ResourceScope.Process)]
public static extern IntPtr LoadLibrary(string libFilename);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi, BestFitMapping = false, ThrowOnUnmappableChar = true)]
static internal extern IntPtr GetProcAddress(IntPtr HModule, [MarshalAs(UnmanagedType.LPStr), In] string funcName/*lpcstr*/);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[ResourceExposure(ResourceScope.Process)]
public static extern bool FreeLibrary(IntPtr hModule);
}
public class Service : IHostedService
{
private Task task { get; set; }
public Task StartAsync(CancellationToken cancellationToken)
{
Console.WriteLine("start: StartAsync");
task = Task.Run(() => Worker());
return Task.CompletedTask;
}
private void Worker()
{
while (true)
{
var dll = NativeMethods.LoadLibrary("D:\\source\\repos\\CreateDll\\bin\\Debug\\CreateDll.dll");
if (dll == IntPtr.Zero)
{
throw new Exception($"Could not load library: {Marshal.GetLastWin32Error()}");
}
var functionDll = NativeMethods.GetProcAddress(dll, "CreateDll.Program.Main");
if (functionDll == IntPtr.Zero)
{
//NativeMethods.FreeLibrary(dll);
throw new Exception($"Could not load method: {Marshal.GetLastWin32Error()}"); // Could not load method: 127
}
NativeMethods.FreeLibrary(dll);
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("start: StopAsync");
task.Dispose();
return Task.CompletedTask;
}
}
}
код dll
using System;
namespace CreateDll
{
public class Program
{
public static void Main()
{
Console.WriteLine(@"hello world");
// должен блокировать бесконечный процесс
// через 5 секунд, может меньше
while (true)
{
Console.WriteLine("process");
}
}
}
}
если вывести ответ из LoadLibrary, то получаю: 0x00000257d0010000