![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delphi + DLL + printf = magic?
n0name © (2006-10-22 19:30:00)Короче обрисую ситуацию.
Есть у меня 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 выводит в файл. Как связано это между собой?
n0name (2006-10-23 06:02:00) [1]
> Eraser © (23.10.06 00:47) [5]
Это полный листинг программы. Где неправильная работа с памятью?
Eraser (2006-10-23 00:47:00) [2]> [0] n0name (22.10.06 19:30)
обычно подобные ошибки возникают, когда в программе не правильно работают с памятью.
то, что если убрать a: array of Integer; ошибки нету - чистая случайность.
n0name (2006-10-22 22:00:00) [3]
> может что-то со стеком не так ?
Навряд ли.
guav (2006-10-22 21:18:00) [4]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 21:05:00) [5]
> то всё работает, то есть printf выводит в файл.
Если не закомментировать то не работает, и printf не выводит в файл.
guav (2006-10-22 20:40:00) [6]Телепатор не работает.
Что происходит если не закомментировать var a: array of Integer ?