Вам действительно нужно добавить проверку ошибок. По крайней мере, проверьте, если _dllHandle! = IntPtr.Zero. Кроме того, в зависимости от текущего рабочего каталога это опасно, используйте Assembly.GetEntryAssembly (). Location, чтобы получить полное имя пути.
Возможно, имя функции неверно. Экспорт имеет тенденцию быть украшенным, как _MyDllFunc или _MyDllFunc @ 4. Более дико, если он был скомпилирован компилятором C ++. Используйте Dumpbin.exe / exports в вашей DLL, чтобы увидеть настоящие имена.
Возвращаясь к обработке ошибок, используйте SetLastWin32Error в атрибуте [DllImport]. Бросьте Win32Exception, если функция возвращает false или IntPtr.Zero.
Редактировать: я вижу реальную проблему. Использование CharSet.Auto для GetProcAddress () неверно. Очень не повезло, это всего лишь функция only Windows API, которая имеет только версию ANSI. Вы должны использовать CharSet.Ansi. Хорошее место для получения правильных объявлений [DllImport] - pinvoke.net