Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2018, 22:37   #1
monster00svb
 
Регистрация: 21.05.2018
Сообщений: 3
По умолчанию Invalid Pointer operator

Здравствуйте, уважаемые программисты!
Не могу справиться с проблемой.
Имеется проект программы для работы с библиотекой швейцарских эфемерид. Все нужные функции объявлены большая часть из них нормально работает, возвращает искомые значения и т.д. Но, вызов одной функций (если кто знает, swe_fixstar_UT) постоянно вызывает исключение "Project ХХХ raised exception class EAccessViolation with message 'Access violation at address 00401C22 in module 'ХХХ'. Write of address 0000000C'. Process stopped."
В функцию передаётся рад параметров, один из которых значение переменной типа "PChar" (название звезды). Функция по значению этой переменной выбирает из текстового файла строку с параметрами, выполняет расчёты и возвращает результаты вычислений в указанны массив. Данные рассчитываются,но после окончания расчётов выдаётся исключение и всё глохнет...
Прошу помощи, может кто-нибудь сталкивался с подобным.
Спасибо!
monster00svb вне форума Ответить с цитированием
Старый 21.05.2018, 23:14   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Что-то, видимо, не так передаёте.
Судя по описанному поведению - проблема с очисткой стека
Или пишите разработчикам.
Black Fregat вне форума Ответить с цитированием
Старый 21.05.2018, 23:41   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Ansi <> Unicode
дай посмотреть DLL.
------------------
Апд.: параметры функций передаются stdcall (через стек). Их порядок, размер и выделенная дин. память должны иметь месть быть правильными.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 21.05.2018 в 23:56.
min@y™ вне форума Ответить с цитированием
Старый 22.05.2018, 12:12   #4
monster00svb
 
Регистрация: 21.05.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Ansi <> Unicode
дай посмотреть DLL.
------------------
Апд.: параметры функций передаются stdcall (через стек). Их порядок, размер и выделенная дин. память должны иметь месть быть правильными.

Спасибо, разобрался!
Я пытался всунуть в качестве star переменную типа PChar, причём задавал её размер с запасом для более 41 символа. Задача решалась, но с генерацией исключений. Ещё раз спасибо .
С уважением, Владимир
monster00svb вне форума Ответить с цитированием
Старый 23.05.2018, 12:10   #5
monster00svb
 
Регистрация: 21.05.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Ansi <> Unicode
дай посмотреть DLL.
------------------
Апд.: параметры функций передаются stdcall (через стек). Их порядок, размер и выделенная дин. память должны иметь месть быть правильными.

Здравствуйте min@y™!
Я так понял, что Вы имели дело со швейцарскими эфемеридами? Есть ещё один вопрос по ним. С swe_fixstar_UT я разобрался, ещё раз спасибо за ответ, но есть ещё ф-я swe_fixstar2_mag, выводящая звёздную величину светила, и она вообще не хочет работать, выдаёт вот такое сообщение: "Project ХХХ.exe raised exception class EAccessViolation with message 'Access violation at address 60DA5646 in module 'swedll32.dll'. Write of address 00000000'."
Код:
var
mag: double;
St_name: array [0..40] of Char;
SName:String;
ns, i: integer;
zxc: Longint;

begin
SName:=Trim(SE_N_MAE[N_Star-1]);
ns:=Length(SName);
i:=0;
while i<=ns-1 do
begin
St_Name[i]:=SName[i+1];
Inc(i)
end;
zxc:=swe_fixstar2_mag(St_Name, mag, sErr);
Frm_main.Lbl_m_st.Caption:=FloatToS tr(mag);
end;
Нужна помощь профессионала
Спасибо.
monster00svb вне форума Ответить с цитированием
Старый 23.05.2018, 12:29   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

Ну так swe_fixstar2_mag требует адреса в качества параметров, а вы ей значения суете. Вот, например, mag типа double чему будет равен? 0. И по какому адресу функция будет писать? 0. О чем ваша ошибка? О том, что вы пытаетесь писать по адресу 0. Никаких ассоциаций?..
p51x вне форума Ответить с цитированием
Старый 23.05.2018, 13:08   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от monster00svb Посмотреть сообщение
Я так понял, что Вы имели дело со швейцарскими эфемеридами?
До появления этой темы я вообще не знал про их существование. И до сих пор не знаю, что это такое. Я просто в гугле нашёл описание функции, прочитал его и указал тебе на те места, где ты мог сделать ошибку. Это всё.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid pointer operation. KoBRaAndrey Общие вопросы Delphi 6 02.06.2010 17:32
Invalid Pointer Operation csander Общие вопросы Delphi 0 21.10.2009 17:44
Invalid Pointer Operation Unconnected Общие вопросы Delphi 3 21.02.2009 20:23
Invalid pointer operation Димарик Общие вопросы Delphi 2 05.11.2007 09:53
Delphi + dll= Invalid Pointer Operator LEKA Общие вопросы Delphi 4 01.05.2007 23:38