samtoad Ответов: 1

Да, как вы это делаете. C# вызов функции DLL. Программа умирает


Я собрал приложение на языке C#, которое вызывает некоторые функции из библиотеки DLL. Это мое объявление функции:
[DllImport("c:\\users\\auror\\source\\repos\\dll1\\debug\\Dll1.dll")] public static extern int MM_HELPABOUTME();

В моем приложении C# я могу вызвать messagebox из рутины DLL без каких-либо проблем. Но когда я нажимаю кнопку "ОК", приложение C# завершается. Я думал, что приложение C# должно продолжать работать, но оно завершается. Что происходит?? Может ли кто-нибудь дать ответ, почему. Спасибо.

= = = = = = Перенесено из решения:

Просто простая процедура C#.
private void button1_Click(object sender, EventArgs e)
{
int ic;

ic = MM_HELPABOUTME();
/// ic = MM_ABOUTDLL();
}

Мое объявление функции DLL:
[DllImport("c:\\users\\auror\\source\\repos\\dll1\\debug\\Dll1.dll")]
public static extern int MM_HELPABOUTME();

Я учусь на этих проблемах, потому что у меня есть больше вызовов функций dll, которые будут помещены в это приложение C#.

Спасибо. Это то, что вы ищете??

Что я уже пробовал:

Я просто переписал DLL, чтобы избежать искажения имени, и DLL перестроилась нормально. Я просто пытаюсь соединить приложение C# и DLL-файл вместе и заставить его работать. Любая помощь, конечно, будет полезна.

MadMyche

Фактический код для этой процедуры был бы полезен

Rob Philpott

Это все еще проблема? Если да, то не могли бы вы опубликовать прототип C++ - это может быть несоответствие соглашению о вызовах.

1 Ответов

Рейтинг:
1

Wendelius

Есть вероятность, что где-то по пути возникнет исключение.

Попробуйте положить звонок внутри try-catch - C# Reference | Microsoft Docs[^] и ловить все исключения. Используйте отладчик, чтобы выяснить, какое исключение генерируется, если таковое имеется.

Это должно дать вам больше информации о проблеме.

Конечно, одно дело-с помощью отладчика дважды проверить, что после этого вызова не запускается никакой дополнительный код. Например, если вы дважды подключили событие click, другой блок кода может закрыть приложение.