Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
14-1082505360
sashko
2004-04-21 03:56
2004.04.11
Разработка интернет-приложений в Delphi


3-1082007252
Evgenija
2004-04-15 09:34
2004.04.11
Подсоединение к базе Оракла


1-1082210213
alsov1234
2004-04-17 17:56
2004.04.11
Медленный скролинг в гриде


14-1082007319
Карелин Артем
2004-04-15 09:35
2004.04.11
Посоветуте программу для рассылки.


14-1082358614
Семен Сорокин
2004-04-19 11:10
2004.04.11
ненужная WINDOWS :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский