- Код: Выделить всё
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? Может нужно задать какие-то параметры компиляции, непредусмотренные стандартными настройками?