Отладка DLL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

в коде Dll замени

Код: Выделить всё

 procedure GetData(Data: TDwordArray);

на

Код: Выделить всё

 procedure GetData(Data: TDwordArray); export;


ну и объявление экспорта из dll сделай:

Код: Выделить всё

exports
 GetData name 'GetData';


в коде программы поставь var перед Data:

Код: Выделить всё

procedure GetData(var Data: TDwordArray); external 'MyDll.dll'; 
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Alex. S писал(а):Частичный код DLL:

Код: Выделить всё
...
TDWordArray = array of Cardinal;
...
procedure GetData(var Data: TDWordArray);
begin
//
SetLength(Data, 1);
//
Data[0]:=5;
end;




Запрещено передавать между dll и основной программой динамические структуры со счетчиком ссылок, aka (1) динамические массивы, (2) строки и (3) объекты без дополнительных действий, объединяющих менеджеры памяти основной программы и dll. И хоть что заделай, программа будет крашиться, искажать данные и вести себя странно. И то, что позволено в дельфи, здесь не прокатит. :D
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

SSerge писал(а):(3) объекты без дополнительных действий

Это что?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

имеется ввиду
(1) динамические массивы, (2) строки и (3) объекты

и
без дополнительных действий, объединяющих менеджеры памяти основной программы и dll

Про это уже много копий сломано. ждем... ждем пакетов
Ответить