关于IP地址问题(100分)

  • 主题发起人 主题发起人 niuqi31
  • 开始时间 开始时间
N

niuqi31

Unregistered / Unconfirmed
GUEST, unregistred user!
我根据前人的知识将获得本机IP地址的函数(delphi)改成了BCB5中可以调用的函数.
我遇到了两个问题:1函数名不能封装到Form类里;
2:在Form的Active或Create不能调用该函数,放在Button里可以.[:D].
现附上函数,请各位帮忙,看一下是什么问题.
#include <WinSock.hpp> // Pascal unit

void GetComputerNameAndIP(void)
{
WORD wVersionRequested;//: WORD;
TWSAData wsaData ;
PHostEnt p;//: ;
char s[128];
char *p2;
AnsiString OutPut;

// {Start up WinSock}
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);

// {Get the computer name}
gethostbyname((char *)&s);
p = gethostbyname(s);

// {Get the IpAddress}
if (p!=NULL){
p2 = inet_ntoa(*(PInAddr(*p->h_addr_list)));
MainFrom->dkh->Caption=StrPas(p->h_name);
MainFrom->btl->Caption=StrPas(p2);
}
WSACleanup;
}
 
你在Form的Show事件里调用就可以了
 
在Form的OnShow中还是不能调用该函数.
 
1、用单元的.h文件而不是.cpp文件来包含WinSock.hpp,就可以把该函数定义为窗体类的成
员函数。
2、看如下修改,我调试过,是可以在OnCreate事件里调用的:
void GetComputerNameAndIP(void)
{
WORD wVersionRequested;//: WORD;
TWSAData wsaData ;
PHostEnt p;//: ;
char s[128];
char *p2;
AnsiString OutPut;

// {Start up WinSock}
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);

// {Get the computer name}
gethostname(s, sizeof(s)); //注意:改了这一行
p = gethostbyname(s);

// {Get the IpAddress}
if (p!=NULL){
p2 = inet_ntoa(*(PInAddr(*p->h_addr_list)));
Form1->dkh->Caption=StrPas(p->h_name);
Form1->btl->Caption=StrPas(p2);
}
WSACleanup;
}
 
谢谢你们的帮助!
 
我的回答只值5分? :<

(自言自语……喂,千万不能失失态)
 
to sachow:实在不好意思,在填分时笔误,能更正吗?[8D]
 
恐怕更正不了,除非版主更新数据库里的数据。不过没这个必要了,我并不想争这点分,而
是想搞清楚我的回答是不是受到了不公正的对待。现在知道是个笔误,也就没有关系了。
 

Similar threads

I
回复
0
查看
677
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部