Форум: "Начинающим";
Текущий архив: 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