Страница 1 из 1
Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.11.2010 17:51:34
Sheleh
Возможно вопрос глупый, но я впервые работаю на лазарусе (0.9.28.2 windows). Пытаюсь переписать свой проект, и вот вопрос в типичном коде приема файлов через winnet. При компиляции в среду Win32 все работает, а вот в WinCE выскакивает ошибка несовместимости типов:
Код писал(а):var
BufferLen: DWORD;
...
begin
...
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Компилятор писал(а):unit1.pas(80,66) Error: Incompatible type for arg no. 4: Got "LongWord", expected "LPDWORD"
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.11.2010 18:11:48
Иван Шихалев
Должно быть @BufferLen, очевидно.
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.11.2010 18:27:58
Sheleh
Спасибо, заработало. Но в чем очевидность и зачем этот знак "@"
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.11.2010 18:36:10
coyot.rush
Но в чем очевидность и зачем этот знак "@"
Насколько я помню MS SDK всё что начинается c lp есть указатель
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.11.2010 19:42:19
Mr.Smart
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 13.11.2010 09:37:13
Sheleh
Компилятор теперь не ругается, но на выходе получается:
"Project1 не является приложением Windows CE"И проблемма именно в "InternetReadFile(hURL, @Buffer, SizeOf(Buffer), @BufferLen);" без вызова этой процедуры программа запускается.
Добавлено спустя 5 часов 14 минут 34 секунды:В общем в итоге код такой
Код: Выделить всё
{$IFDEF WINCE}
hSession:= InternetOpen(PWideChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
try
hURL := InternetOpenURL(hSession,PWideChar(fileURL),nil,0,0,0);
try
Stream.Clear;
repeat
InternetReadFileEx(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Stream.Write(Buffer,BufferLen);
until BufferLen = 0;
finally
InternetCloseHandle(hURL)
end;
finally
InternetCloseHandle(hSession)
end;
{$ENDIF}
{$IFDEF WIN32}
hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
try
hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,0,0);
try
Stream.Clear;
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
Stream.Write(Buffer,BufferLen);
until BufferLen = 0;
finally
InternetCloseHandle(hURL)
end;
finally
InternetCloseHandle(hSession)
end;
{$ENDIF}
Win32 код работает великолепно. WinCe же часть не ругается, но и не работает. Перепробовал все функции InternetReadFile (Ex, ExA, ExW)
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 12.03.2018 13:44:00
big_big
Кому-то удалось решить проблему?
заметил, что проблема в данном случае не в InternetReadFile, а в HttpSendRequest или InternetOpenUrl. Эти функции не возвращают ничего.
Re: Incompatible type: Got "LongWord", expected "LPDWORD"
Добавлено: 13.03.2018 15:58:53
serbod
1. Лучше использовать InternetOpenUrlW(), для гарантии, что вызывается именно Unicode-версия
2. Возможно, требуется дополнительное преобразование строки URL:
Call InternetCanonicalizeUrl first if the URL being used contains a relative URL and a base URL separated by blank spaces.
3. Глянуть описание ошибки:
To retrieve a specific error message, call GetLastError. To determine why access to the service was denied, call InternetGetLastResponseInfo.