У меня есть существующая программа VB6, которая вызывает библиотеку Fortran dll со следующим определением:
Declare Function START Lib "BackEndLib2.dll" Alias "_START@0" () As Integer
Мы находимся в процессе миграции приложения VB6 на C # (.net 4.0), и определение теперь таково:
[DllImport("BackEndLib2.dll", EntryPoint = "_START@0")]
public static extern short START();
Однако, когда я вызываю тот же самый вызов функции в c #, он выполняет вызов dll, успешно возвращается к управляемому коду и через некоторое время выдает исключение переполнения стека.
Я также попробовал тот же вызов DLL в VB.net с тем же результатом:
Declare Function START Lib "BackEndLib2.dll" Alias "_START@0" () As Short
Есть идеи, почему один и тот же вызов функции вызывает исключение переполнения стека в .NET 4.0, но успешно работает в vb6?
Я предполагаю, что испортил стек вызовом dll, но я не уверен. Я пробовал много разных типов параметров, но пока ничего не получалось.
Редактировать: Кажется, это проблема только в WPF, и если я создаю тот же пример в Windows Forms, он не падает.