Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Pascal to C++

12K
12 ноября 2007 года
MuHAOS
63 / / 06.12.2006
Уважаемые полиглоты, помогите пожалуйста перевести функцию с дельфи на си :
Код:
function GetLocalIP: String;
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(MAKEWORD(2,0), wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;

По идеи она должна возвращать локальный IP. Просто перевожу одну программу из Делфи в С++ Билдер.
1.9K
13 ноября 2007 года
max_dark
256 / / 11.11.2005
Вот держи
Код:
#include <winsock2.h>
#include <iostream>

using namespace std;

/*
function GetLocalIP: String;
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(MAKEWORD(2,0), wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;
*/
const char* GetLocalIP() {
    const char * result=NULL;
    WSAData wsaData;
    hostent* P;
    char Buf[128];

    if ( WSAStartup(MAKEWORD(2,0),&wsaData) == 0 ) {
        if ( gethostname(Buf,128) == 0 ) {
            P = gethostbyname(Buf);
            if ( P != NULL ) {
                result = inet_ntoa(*(in_addr*)(*P->h_addr_list));
            }
        }
        WSACleanup();
    }
    return result;
}
int main () {
    cout<<GetLocalIP()<<endl;
    return 0;
}

P.S.: Спасибо за функцию
12K
14 ноября 2007 года
MuHAOS
63 / / 06.12.2006
Спасибо! Но я уже сделал, вот что получилось :
Код:
getip(){
 WSAData wsaData;
 PHOSTENT P;
 sockaddr_in  addr;
 char Buf[128];
 WSAStartup(MAKEWORD(2,0), &wsaData);
 if (gethostname(Buf, 128) == 0){
      P = gethostbyname(Buf);
      if( P != NULL ){
       memcpy(&addr.sin_addr,P->h_addr,P->h_length);
       strcpy(Buf,inet_ntoa(addr.sin_addr));
       return (AnsiString)Buf;
      }
     }
 return "";
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог