Параметр results
представляет собой массив значений типа double.Предположим, что в массиве есть numberOfTrials
элементов.Затем вы бы назвали DLL следующим образом:
function CalculateMC(h, b, d: PChar; numberOfTrials: int64;
results: PDouble): integer; stdcall; external 'MYDLL.DLL';
.....
var
returnVal: integer;
results: array of Double;
.....
SetLength(results, numberOfTrials);
returnVal := CalculateMC(h, b, d, numberOfTrials, @results[0]);
Одна из основных проблем, которую я вижу, заключается в том, что ваша функция C ++ выглядит как функция-член.Вы можете вызвать это из Delphi, добавив дополнительный параметр к CalculateMC
перед всеми остальными параметрами, которые содержат указатель на экземпляр объекта C ++.Но вам понадобится способ завладеть этим экземпляром.И, очевидно, вам придется изменить объявление CalculateMC
в вашем коде Delphi.Предположительно, ваша DLL экспортирует функцию, которая возвратила вновь созданный экземпляр.
Другая возможная проблема заключается в том, что вы указали stdcall
в своем импорте Delphi, но не сделали этого в коде C ++.Если вы компилируете C ++ с возможностью использовать stdcall
для своих функций, то интерфейсы будут совпадать.В противном случае вы вообще не сможете вызвать этот код из Delphi, потому что MS thiscall
не имеет прямого эквивалента в Delphi.Я бы добавил явный __stdcall
к вашему коду C ++.