У меня есть двоичные данные из приложения C ++, которое работает. Я хочу запустить этот конкретный двоичный код прямо из моего приложения на C #.
У меня есть эта функция, которую я получил из интернета:
static void MemExe(byte[] buffer)
{
Assembly asm = Assembly.Load(buffer);
if (asm.EntryPoint == null)
throw new ApplicationException("No entry point found!");
MethodInfo ePoint = asm.EntryPoint;
object ins = asm.CreateInstance(ePoint.Name);
ePoint.Invoke(ins, null);
}
Он хорошо работает с двоичным кодом C #, но если я пытаюсь открыть двоичный код C ++, происходит сбой.
Исключение прямо здесь:
Дополнительная информация: Не удалось загрузить файл или сборку ‘5154816 байт, загружен Test, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null’ или одна из его зависимостей. Была предпринята попытка загрузить программу с неверным форматом.
Я думаю, это что-то связано с заголовком? Я не эксперт …
Можно ли запускать бинарный файл c ++ так же, как функция Memex
работает бинарный C #?
Благодарю.
Assembly.Load(...)
будет загружать только двоичные файлы .NET.
Если вы хотите иметь доступ к бинарному API-интерфейсу, отличному от .NET, вам следует использовать сигнатуры P / Invoke.
Если вы хотите запустить исполняемый файл, используйте System.Diagnostics.Process.Start(...)
,
Других решений пока нет …