- Код: Выделить всё
- library mydll;
 uses
 Windows;
 function Test(hParentWindow: HWND): integer stdcall export;
 begin
 result:=MessageBox(hParentWindow,'Hello world from a Lazarus DLL','',MB_OK);
 end;
 exports Test;
 begin
 end.
Lazarus выдал dll’ку, но попытавшись вызвать функцию Test в MapBasic программе, MapInfo ругнулся «Не удалось загрузить Mydll.dll, потому что это не 32-битная библиотека. Не удалось присоединить внешнюю библиотеку mydll.dll».
Вот код MapBasic проги:
- Код: Выделить всё
- declare sub main
 Declare Function Test Lib "mydll.dll" Alias "Test" (ByVal ParentWindow As integer) As integer
 dim i as integer
 sub main
 i=test(systeminfo(9))
 ‘встроенная функция systeminfo(9) возвращает HWND основного окна MapInfo.
 end sub
Потом в настройках компилятора убрал все галочки, кроме одной «совместимость с Delphi», собрал dll’ку, теперь MapInfo ругается по-другому «Не удалось загрузить Mydll.dll. Не удалось присоединить внешнюю библиотеку mydll.dll», перепробовал разные варианты настроек – ничего не помогло.
Далее установил Dev-Pascal 1.9.2, скомпилировал в нём. Из полученной dll’ки функция успешно была выполнена в MapBasic программе, замечательно! но в DevPascal’е версия компилятора FPC 1.0.6, а в Lazarus’е 2.0.2. Кроме того, хотелось бы использовать Lazarus и более новую версию компилятора, нежели DevPascal.
В чём может быть проблема? Почему dll’ка собранная в версии 1.0.6, отличается от аналогичной, но собранной в версии 2.0.2? Может нужно задать какие-то параметры компиляции, непредусмотренные стандартными настройками?



