Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 21:04   #1
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию Не могу передать строку в функцию

Здравствуйте. Весь вечер мучаюсь, просто не знаю как правильно...

вот что есть:

Код:
function WebGet(Host: string; Request: String): integer;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  WSAData1: TWSAData;
  Socket1: integer;
  SockAddr1:TSockAddr;
  Buffer1, ip:string;
  phe: PHostEnt;
  pptr: PaPInAddr;
  r: integer;
begin
  if WSAStartup(MAKEWORD(2,2), WSAData1)=0 then begin
    Socket1:=Socket(AF_INET,SOCK_STREAM,0);
    if Socket1<>INVALID_SOCKET then begin
      SockAddr1.sin_family:=AF_INET;
      phe := GetHostByName(PAnsiChar('ya.ru')); // так всё работает
      //phe := GetHostByName(PAnsiChar(Host)); // так не резолвится
      pPtr := PaPInAddr(phe^.h_addr_list);
      ip:= inet_ntoa(pptr^[0]^);
      SockAddr1.sin_addr.S_addr:=inet_addr(PAnsiChar(127.0.0.1)); // тут тоже работает
      //SockAddr1.sin_addr.S_addr:=inet_addr(PAnsiChar(ip)); // а так нет
      SockAddr1.sin_port:=htons(80);
      if Connect(Socket1,SockAddr1,SizeOf(SockAddr1))<>0 then begin
        Buffer1:='GET '+Request+' HTTP/1.1'#13#10+
          'host: '+Host+''#13#10+
          'Connection: close'#13#10+
          #13#10;
        if send(Socket1,Buffer1[1],Length(Buffer1),0)<>SOCKET_ERROR then r:= 1;
      end else r:= -3;
    end else r:= -2;
  end else r:= -1;

  if r>0 then result:= 0
  else result:= WSAGetLastError();

end;
как правильно передать строку в функции GetHostByName и inet_addr?

Больше спасибо за помощь.

Последний раз редактировалось Никки; 18.09.2010 в 21:07.
Никки вне форума Ответить с цитированием
Старый 18.09.2010, 21:09   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Какая у вас версия Дельфи? Просто в новых строки по умолчанию юникодовские, может, в этом проблема.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 18.09.2010, 21:11   #3
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

у меня 2010 RAD Studio... что делать то?
Никки вне форума Ответить с цитированием
Старый 18.09.2010, 21:13   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Смените string на ansistring
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 18.09.2010, 21:22   #5
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

Большое спасибо! Всё получилось
Никки вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в timeSetEvent CALLBACK передать функцию класса ? Teksa Общие вопросы C/C++ 0 23.07.2010 11:21
Как передать в функцию указатель на String avd Общие вопросы C/C++ 6 06.06.2010 17:52
Как передать в функцию параметр разных типов borispnz Общие вопросы Delphi 5 06.02.2010 08:37
передать вектор структур в функцию GroundZero Общие вопросы C/C++ 3 22.08.2009 11:23
Как передать значение переменной из функции в ACCESSе в функцию в EXCELе? musicitsme Microsoft Office Access 1 01.04.2009 10:24