Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Вниз

AV при вызове HeapAlloc 


USAtyj   (2001-12-21 12:56) [0]

Пишу длл, которая в зависимости от pcCommand выдает результат в pcResult. Вот код экспортируемой функции:

function ExecCommand(pcCommand : PChar; var pcResult : PChar) : integer; stdcall;
var
sResult: String;
begin
pcResult := HeapAlloc(GetProcessHeap(), 0, 1023 + 1);
if (pcResult = nil) then
EXIT;
............
StrPCopy(pcResult, sResult);
end;

Так вот на первой же строчке, где пытаюсь выделить память в "куче" вылетает AV. (...Write of adress 00000000.)

Спасибо.



Владислав   (2001-12-21 13:59) [1]

Этим кодом ты не память выделяешь а кучу.



Dimka Maslov   (2001-12-21 14:04) [2]

Выделяй необходимое количество памяти стандартными способами в вызывающей программе.

в вызывающей программе
var
Command, Result: string;
begin
Command:="Command";
SetString(Result, nil, 1024);
ExecCommand(PChar(Command), PChar(Result));
Result:=PChar(@Result[1]);
end;


в dll:
function ExecCommand(pcCommand, pcResult: PChar): Integer; stdcall;
var
sResult: string;
begin
.....
StrPCopy(pcResult, sResult);
end;



Владислав   (2001-12-21 14:05) [3]

Извини, ошибочка вышла. Проверяй что возвращает GetProcessHeap(). Может там NULL...



Digitman   (2001-12-21 15:16) [4]

проблема в передаче фактического параметра:

var pcResult : PChar

его адрес равен nil, вот и AV из за этого



USAtyj   (2001-12-21 15:50) [5]

Все спасибо за ответы...
Разобрался сам: ошибка была в описании функции в самой проге:
в DLL:
function ExecCommand(pcCommand : PChar; var pcResult : PChar) : integer; stdcall;
в проге:
function ExecCommand(pcCommand : PChar; pcResult : PChar) : integer; stdcall;



Digitman   (2001-12-21 16:10) [6]

из той же оперы - несоответствие способа передачи фактического аргумента описанию формального




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Наверх








Память: 0.75 MB
Время: 0.015 c
3-28421           NLO                   2001-12-07 12:29  2002.01.10  
Выполнить start transaction commit в процедуре InterBase 6


6-28516           SERGX                 2001-09-30 15:32  2002.01.10  
Я с помошью CientSocet & ServerSocet сделал чат НО..


6-28523           Dr. Web               2001-10-03 10:34  2002.01.10  
Фильтрация IP пакетов...


1-28471           XPatriot              2001-12-21 14:50  2002.01.10  
Работа с файлами.


1-28501           abandon               2001-12-23 16:23  2002.01.10  
Метки на jpg, bmp ит.д.