Главная страница
    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.043 c
3-1079349068
Russko
2004-03-15 14:11
2004.04.11
AutoInc Field


1-1082533502
denis24
2004-04-21 11:45
2004.04.11
Нажатие клавиши на форме


1-1082712749
tria
2004-04-23 13:32
2004.04.11
Как переименовать секцию в ini-файле?


9-1065213319
Sword-Fish
2003-10-04 00:35
2004.04.11
Проверка столкновений


1-1079960435
Kupnu4
2004-03-22 16:00
2004.04.11
Как заставить картинку мигать?





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