1. Имеется DLL, содержащая API для управления некой железкой;
2. Для этой DLL имеется враппер для .NET с описанием функций (процедур) библиотеки (их параметров и возвращаемых значений);
3. Имеется описание этой dll, созданное с помощью DependencyWalker, содержащее имена экспортируемых функций (процедур) и смещения точек входа.
Требуется:
Подключить эту DLL к программе на Free Pascal, используя имеющуюся информацию.
Подключить эту DLL к программе на Free Pascal, используя имеющуюся информацию.
Написал прототип враппера для API на FPC, в виде юнита. После того, как получу на руки железки, попробую все-таки отладить доступ к функциям на Паскале. Пока есть два тонких момента: соответствие типов Free Pascal типам Sys.Int32 и Sys.String из dotNET.
ОтветитьУдалитьЕсли Sys.Int32 это 4-байтное целое -2147483648:2147483647, то ему могут соответствовать и Integer −2147483648. 2147483647, и LongInt −2147483648.2147483647, оба 4-байтные.
Что касается Sys.String, то по своей сути это коллекция символов. Понятно, что появляется на свет она только в дотнетовском враппере, являющемся надстройкой для оригинального API DLL. Поэтому, в первом приближении, можно считать, что это или тип String, или String[X]. Мне кажется более вероятным второй вариант, а это предполагает некоторые проблемы с угадыванием (подбором) длин строк в параметрах паскалевского враппера.
С помощью PEiD пощупал имеющийся APIшный DLL (не дотнетовский враппер).
ОтветитьУдалитьВот что оно мне выдало: Borland Delphi 5.0 KOL/MCK, не упакованный.
Судя по всему, это многое упрощает, так как вызовы, скорее всего, окажутся полностью совместимы.
Найдены нужные определения для Borland Pascal'я. Надеюсь, что проблем с API не будет.
ОтветитьУдалить