Excel + VBA + (DLL на FreePascal)

  1. Создал DLL в Lazarus:
library project1;

{$mode objfpc}{$H+}

function MySum(a: LongInt): LongInt; stdcall;
begin
  Result:=a;
end;

exports
  MySum;

begin

end.
  1. Открыл Редактор VBA в Excel 2010 x64, добавил Модуль, написал такое:

  2. Пробую применить оное поделие:
    изображение

  3. Получаю такое:
    изображение

Где могла собака порыться?

Может не LongPtr нужен? В длл ж не указатель по идее.

Пробовал обычный Long, то же самое

Гугл вроде бы говорит, что в Дельфи/FPC LongInt 4 байта даже на х64.

Longint - Free Pascal wiki

Согласен.

Вобщем, до чего я докатился.
Сначала делал как тут:

Перепробовал разные типы данных на обоих языках, варианты “по значению” или “по ссылке”, выдает либо ноль, либо что то типа 2E+308, либо вылет Excel.

Забил на пару дней.

Сегодня действовал по новым вводным отсюда (сообщение #4): Подключить DLL(C++) к VBA

Нужно сделать обертку для импортируемой функции.

Итого код библиотеки (поменял тип на Single - мне потом работать с вещественными числами):

library project1;

{$mode objfpc}{$H+}

function MySum(a: Single): Single; stdcall;
begin
  Result:=a;
end;

exports
  MySum;

begin

end.

В редакторе VBA пишу:

Private Declare PtrSafe Function MySum Lib "D:\PROGRAMMING\Lazarus\ExcelDLL\MyDll.dll" (ByVal a As Single) As Single

Function МОЯ_ФУНКЦИЯ(a As Single)
    МОЯ_ФУНКЦИЯ = MySum(a)
End Function

Теперь работает:
изображение

изображение

1 лайк