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

Вниз

Запускаю из среды - нет ошибки. Запускаю ехе - есть :(((   Найти похожие ветки 

 
Franzy   (2009-04-23 14:35) [0]

Столкнулся с совершенно непонятной вещью. Запускаю прогу из среды (Д7) - работает нормально. Запускаю скомпилированный файл - вылазит ошибка Access Violation в библиотеке ntdll.dll. Что за ерунда?


 
easy ©   (2009-04-23 14:40) [1]

Она так и останется непонятной, пока не будет кода и полного текста сообщения об ошибке


 
Franzy   (2009-04-23 15:15) [2]

Кода там несколько тысяч строчек, вряд ли имеет смысл его приводить. Текст ошибки: Access Violation at address XXXXXXXXX in module "ntdll.dll". Read of address 00000000.

Меня просто удивляет, что при запуске из среды прога работает, а при запуске как ехе - нет. Трассирование ошибки с помощью лог-файла показало, что вылет имеет место быть при передаче управления вызываемой из длл функции обратно основной программе (сама функция выполянется успешно). Вот фрагмент:

function SendGridData : longint;
var
 ec1,ec2 : longint;
begin

 ec1 := G2DExportGrid(GridMap);
 // эта процедура записывает данные в memory-mapped file GridMap
 //процедура из длл, написанной на дельфи
 // выполняется успешно

 if ec1=0 then
   ec2 := FSReadGridData(GridMap,Length(GridMap))
  // эта команда считывает данные из файла выше
 //процедура из длл, написанной на фортране
   // выполняется успешно, судя по логу

 else
   ec2:=ec1;

 //А вот здесь вылетает - сообщение не выводится

showmessage("hello");

 if (ec1=0) and (ec2=0) then
  begin
    G2DFreeGridMap;
    G2DFreeMemory;
    Result:=0;
  end;

 Result:=ec2;
end;

//////////////
// А это кусок интерфейсной части проги, на всякий случай приведу:

function G2DExportGrid(const MapName: PAnsiChar): longint; stdcall; external "PKSGridder2d.dll";
procedure G2DFreeGridMap; stdcall; external "PKSGridder2d.dll";
procedure G2DFreeMemory; stdcall; external "PKSGridder2d.dll";

///////////////////////////////
function FSReadGridData(const mapname: PAnsiChar; len : longint): longint; stdcall; external "PKSSolver.dll" name "_FSREADGRIDDATA@8";


 
Rouse_ ©   (2009-04-23 16:00) [3]

Откуда вот такая строчка взялась?

> function FSReadGridData(const mapname: PAnsiChar; len :
> longint): longint; stdcall; external "PKSSolver.dll" name
> "_FSREADGRIDDATA@8";


 
Franzy   (2009-04-23 16:06) [4]

Это из интерфейсной части. FSReadGridData - это функция из длл на фортране. В этой строчке я ее объявляю и делаю доступной для основной проги. Если вас смущает _FSREADGRIDDATA@8, то это таким прикольным способом фортран обозначает точки входа в свои длл. 8 - это, кстати, кол-во байт в параметрах. В моем случае - пойнтер на строку и ее длина. Вряд ли проблема в этом, раньше без проблем работало.


 
Anatoly Podgoretsky ©   (2009-04-23 16:12) [5]

Насколько я знаю, обращение к Фортрану только через указатели, даже если данных один байт, но может что изменилось в последнее время.


 
Franzy   (2009-04-23 16:28) [6]

Так, ошибку локализовал. Что-то при чтении из MMF. При удалении этих строк ошибка перестает вылазить. Буду смотреть дальше.

Хотя до сих пор в непонятках, почему ошибка не вылазит, когда из среды запускаешь прогу...


 
Franzy   (2009-04-23 16:43) [7]

Все, нашел ошибку. Когда делал аллокейт памяти для дин. массива в фортране не тот размер передавал, из-за этого данные писались за конец массива... Теперь все нормально. Хотя до сих пор непонятно, почему на ехе ошибка вылазила, а из-под среды - нет.


 
Игорь Шевченко ©   (2009-04-23 18:51) [8]


> Хотя до сих пор в непонятках, почему ошибка не вылазит,
> когда из среды запускаешь прогу...


потому что из-под среды программа запускается в режиме отладки, а это накладывает свои ограничения


 
Германн ©   (2009-04-23 19:06) [9]

AV вообще противная штука в таком случае
> данные писались за конец массива

То она есть, то её нет :(


 
AlexDan ©   (2009-04-23 22:37) [10]

> Игорь Шевченко ©   (23.04.09 18:51) [8]
> потому что из-под среды программа запускается в режиме отладки,
>  а это накладывает свои ограничения
интересно услышать какие. у меня тоже раз такое было. отладка-нормально - ехе-нет. там правда речь шла об удалении рабочих файлов. но было б интересно услышать что за ограничения вообще..


 
Franzy   (2009-04-24 12:24) [11]

2Германн
AV?


 
Германн ©   (2009-04-24 21:59) [12]


> Franzy   (24.04.09 12:24) [11]
>
> 2Германн
> AV?
>

Угу. Именно AV.


 
Franzy   (2009-04-27 12:39) [13]

Я имел в виду, что это такое :)


 
@!!ex ©   (2009-05-01 09:58) [14]

> [10] AlexDan ©   (23.04.09 22:37)
> интересно услышать какие. у меня тоже раз такое было. отладка-
> нормально - ехе-нет. там правда речь шла об удалении рабочих
> файлов. но было б интересно услышать что за ограничения
> вообще..

Например, отладкич может выделять дополнительную память. ТОгда FV может и не возникать.



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

Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1241528409
Knob
2009-05-05 17:00
2009.06.21
Нажатие кнопки


2-1241463269
Ars
2009-05-04 22:54
2009.06.21
Тип поля TClientDataSet


2-1241429434
apic
2009-05-04 13:30
2009.06.21
rave


2-1241072754
Vale
2009-04-30 10:25
2009.06.21
TRadioButton - как сгруппировать?


15-1239276494
Tenebrae
2009-04-09 15:28
2009.06.21
экспорт СМС





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