Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Delphi + DLL + printf = magic?   Найти похожие ветки 

 
n0name   (2006-10-22 19:30) [0]

Короче обрисую ситуацию.
Есть у меня DLL написанная на чистом Си. Использую в ней вызов printf.
Приложение на Delphi у меня оконное, и поэтому хочу изменить стандартный поток вывода в файл. Вроде всё нормально.

procedure SomeProc();
var
a: array of Integer;
begin

end;

var
hLib: THandle;
GideOpen: function (pszAddress: PChar; dwFlags: DWORD): DWORD; cdecl;
hFile: THandle;

test: DWORD;
br: DWORD;

begin
hFile := CreateFile("res.txt", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, 0);
SetStdHandle(STD_OUTPUT_HANDLE, hFile);
hLib := LoadLibrary("H:\msys\home\n0name\wrapper\wrapper.dll");
@GideOpen := GetProcAddress(hLib, "Open");
GideOpen("test", 2);
FreeLibrary(hLib);
CloseHandle(hFile);
SomeProc();
end.

Если закомментировать var a: array of Integer, то всё работает, то есть printf выводит в файл. Как связано это между собой?


 
guav ©   (2006-10-22 20:40) [1]

Телепатор не работает.
Что происходит если не закомментировать var a: array of Integer ?


 
n0name   (2006-10-22 21:05) [2]


> то всё работает, то есть printf выводит в файл.

Если не закомментировать то не работает, и printf не выводит в файл.


 
guav ©   (2006-10-22 21:18) [3]

a: array of Integer;
это добавляет неявный try..finally
может что-то со стеком не так ?
Если сравнить ESP до и полсе вызова ?
function GetESP: Pointer;
asm
  MOV EAX, ESP;
end;

 P1 := GetESP;
 GideOpen("test", 2);
 P2 := GetESP;
 if P1 <> P2 then
   Windows.Beep(400, 200);



 
n0name   (2006-10-22 22:00) [4]


> может что-то со стеком не так ?

Навряд ли.


 
Eraser ©   (2006-10-23 00:47) [5]

> [0] n0name   (22.10.06 19:30)

обычно подобные ошибки возникают, когда в программе не правильно работают с памятью.
то, что если убрать a: array of Integer; ошибки нету - чистая случайность.


 
n0name   (2006-10-23 06:02) [6]


> Eraser ©   (23.10.06 00:47) [5]

Это полный листинг программы. Где неправильная работа с памятью?



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

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.06 c
2-1161240821
Helen
2006-10-19 10:53
2006.11.05
Как скопировать все файлы из каталога


4-1150724006
novill
2006-06-19 17:33
2006.11.05
Заняты ли "горячие клавиши"? Или получить список активных?


1-1159112496
dreamse
2006-09-24 19:41
2006.11.05
Подключение ActiveX к проекту


8-1144233342
dmitrlast
2006-04-05 14:35
2006.11.05
Файл ресурса и mid/wav файл


15-1160664668
ANB
2006-10-12 18:51
2006.11.05
А кто такая, эта Анна Политковская ?