У меня есть много устаревшего кода, который я в настоящее время компилирую, используя устаревшую установку Borland C++ 3.0.
В этом коде есть механизм правил, который я хотел бы извлечь и использовать в приложении C# .NET.
Дело в том, что если я извлеку механизм правил в его собственную DLL, я хочу иметь возможность вызывать эту DLL как из существующего устаревшего кода, который у меня нет времени портировать, так и из приложения C# .NET.
Если я соберу DLL с помощью старого компилятора Borland, я не смогу сообразить, как ссылаться на нее из проекта C# .Net. DllImport завершается с ошибкой BadImageFormatException. Поиск в Google этого исключения показывает, что большинство людей сталкиваются с этой проблемой при компиляции 64-битной программы и загрузке в нее чего-то 32-битного. Дело в том, что я достаточно уверен, что генерирую 16-битные библиотеки DLL, и, похоже, для этого нет обходного пути.
Я могу загрузить более новый компилятор Borland 5 с 32-битным компилятором и компоновщиком, но у меня все еще возникает та же проблема, так что, возможно, у меня тоже что-то не так.
Это мой код вызова С#
[DllImport( "C:\\NSDB\\BorlandDLL\\BorlandDLL.dll", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl )]
static extern int Version();
public frmHelpAbout()
{
InitializeComponent();
lblIssueVersion.Text = + Version();
}
Это мой DLL-код
int Version()
{
return 93;
}
Все мои флаги компилятора и компоновщика являются полными догадками - я надеюсь, что это моя главная проблема.
Я заметил, что мой код DLL не украшен ничем вроде __stdcall, extern "C" или чем-то еще. Кажется, я не могу найти правильный набор символов, понятный Borland C++ 3.0, для принудительного применения тех соглашений о вызовах, которые мне нужны.
Итак, вопросы:
1) Сможет ли когда-нибудь DllImport работать с кодом, сгенерированным из Borland C++ 3.0 1b) Если нет, смогу ли я портировать код для работы с компилятором Borland C+ 5.5.1 и заставить DllImport работать с ним?
2) Можно ли решить проблему? Если бы я перенес код DLL в .NET, смог бы я когда-нибудь заставить старый код Borland вызывать его?
3) Есть ли у вас какие-либо другие инновационные решения, которые позволят мне просто извлечь нужный мне код из этого старого проекта Borland?