Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Variant в параметрах функций из dll   Найти похожие ветки 

 
YuRock ©   (2004-03-22 15:04) [0]

Уважаемые мастера! Ни кто не пытался использовать тип Variant в dll"ках? Проблем не возникало?

У меня происходят страшные вещи: иногда работает, иногда - нет.

Я сделал 2 ф-ции:


__GetNextParams: function(TypeValue: PChar; FormatWidth: Integer; var Buf: Pointer): Variant;
 __ScanParams: procedure(Format: PChar; var Values: Variant; PosParam: TMPosExParams);


Во второй ф-ции Values - это дин. массив, в первой - просто какое-то значение. В обеих случаях иногда падает (пишет Write to address 0x00000011).

Переношу эти ф-ции в exe"шник - все отлично работает (всегда).

ShareMem подключал - не помогло. Эксперементировал с соглашениями вызова - тоже без успеха. Может, у вас какие идеи есть? Вообще, можно ли так писать?


 
YuRock ©   (2004-03-22 15:15) [1]

Да,

TMPosExParams = array [0..255] of char;

так что это дело не в этом...


 
Digitman ©   (2004-03-22 15:36) [2]

ShareMem по-любому обязателен здесь


> иногда падает


отладчик, конечно же, как всегда - штука бесполезная


 
YuRock ©   (2004-03-22 15:49) [3]

К сожалению, отладчик мало помогает - у меня идет

raise Exception.Create() (так нужно), но иногда до этого не доходит! Вываливается "CPU Window" - и все... Сейчас ищу, на какой именно строчке...


 
YuRock ©   (2004-03-22 15:51) [4]

> ShareMem по-любому обязателен здесь

Не совсем согласен - Variant - это ж не String


 
Ega23 ©   (2004-03-22 15:56) [5]

А просто Pointer"ом заменить?


 
Digitman ©   (2004-03-22 15:58) [6]


> YuRock ©   (22.03.04 15:51) [4]


неважно, String или не String

важно, что в DLL память выделяется, а в хост-приложении освобождается ... либо наоборот

при этом менеджер памяти д.б. единый (важнейшее условие)


 
YuRock ©   (2004-03-22 16:17) [7]

Нашел я где валится:

function IsDelim(Value: Char): Boolean;
begin
 Result := (Pos(Value,_DELIM_)<>0); // _DELIM_ = " :;,+-<>/*%^=()[]|&~@#\`{}"#9#10#13
end;


На строке Result := ... !!!

В общем, понятно - память где-то конкретно запортилась... Но вот где?...

> Digitman [6]

Да понятно... Вот только не помогает он, вообще ничего не меняется...


 
YuRock ©   (2004-03-22 16:22) [8]

Всем спасибо - проблема решена. ShareMem помог - просто я по недосыпу в главном проекте его подключил, а в dll - забыл.

Еще раз извиняюсь.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
14-1079435390
Nous Mellon_
2004-03-16 14:09
2004.04.11
Клавиатура сходит с ума :)


1-1082662746
Liona
2004-04-22 23:39
2004.04.11
Помогите написать процедуру ...


3-1082049671
Koba
2004-04-15 21:21
2004.04.11
Запросы


8-1072085487
Ramario
2003-12-22 12:31
2004.04.11
Как jpeg файл переделать в bmp?


1-1080127303
Zilog
2004-03-24 14:21
2004.04.11
Расчет времени! Нужна помощь...