Главная страница
    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.046 c
1-1079934503
pargo
2004-03-22 08:48
2004.04.11
CryptAcquireContext - съедает память


6-1075797279
cherep
2004-02-03 11:34
2004.04.11
ssh


14-1081732593
TButton
2004-04-12 05:16
2004.04.11
Стартовая Страница


4-1079939092
BillyJeans
2004-03-22 10:04
2004.04.11
WM_HOTKEY и NumLock...


14-1081972905
l_igor
2004-04-15 00:01
2004.04.11
Windows XP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский