@ebroker

Падает программа при вызове PInvoke?

Из программы на C# (core 3.1) пытаюсь вызвать метод из С++ приложения и при вызове не получаю даже эксепшн программа просто падает с текстом
ConsoleApp6.exe (process 25388) exited with code -1073741819.

С++
extern "C" __declspec(dllexport) void __cdecl test();


С#
[DllImport("C:\\CMakeProject2.exe", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern void test();


static void Main(string[] args)
{
	try
	{
		   test();
	}           
	catch (Exception e)
	{
		Console.WriteLine(e);
		throw;
	}
}


При вызове test() программа просто падает. Судя по гуглу происходит это из-за разрушения стека, а разрушение стека часто бывает вызвано неправильным прототипом метода при DllImport. Но где здесь может быть ошибка все максимально просто же параметров не вход не на выход нет?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@ebroker Автор вопроса
Проблема решена здесь: https://stackoverflow.com/questions/70798289/c-sha...

Если кратко грузить в виде exe файла можно но есть ограничения которые могут нарушить работу что у меня и случилось.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
freeExec
@freeExec
Участник OpenStreetMap
У вас не библиотека, чтобы из неё экспортируемые функции вызывать.
Даже атрибут называется DllImport, а вы ему чего подсовываете? CMakeProject2.exe
Ответ написан
Ну как минимум ты на стороне C++ вполне чётко написал, что calling convention - cdecl, а на C# почему-то написал stdcall.
Попробуй вот так:
[DllImport("C:\\CMakeProject2.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "test")]
    [SuppressUnmanagedCodeSecurity]
    private static extern void Test();

Ну и библиотеки лучше таки именно в библиотеки собирать, а не в екзешники, и ложить рядом с твоим приложением, а не где-то в глобальной папке.
Ответ написан
PhoenixX33i
@PhoenixX33i
Возможно, С++ приложение имеет другую разрядность...
https://docs.microsoft.com/en-us/answers/questions...
Ответ написан
insighter
@insighter
-First time? - Huh? (C#, React, JS)
Шансы небольшие, но все таки проверьте, может быть вы куда то ещё (системная папка) скопировали старую версию CMakeProject2.exe и всегда загружается она, а не то что вы меняете и пересобираете
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы