有个从String到WideString的问题(50分)

  • 主题发起人 主题发起人 爱上寂寞
  • 开始时间 开始时间

爱上寂寞

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个函数想封装成OCX在网页里用
这个函数是个连接SOCKET的函数

这个是原来的函数:
function TForm1.ConnRemote(hostip, port: String): boolean;
var HSockAddr:TSockAddrIn;
Time:timeval;
FdSet:TFDset;
dwError,ulb,rtValue,revlen:Integer;
tWSADada:WSADATA;
begin
result := true;
WSAStartup($0101,tWSADada);
SocketHandle := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
HSockAddr.sin_family := PF_INET;
HSockAddr.sin_port := htons(strtoint(Port));
HSockAddr.sin_addr.s_addr := inet_addr(PChar(hostip));

FD_ZERO(FdSet);
FD_SET(SocketHandle, FdSet);

Time.tv_sec:= 30;
Time.tv_usec := 0;
ulb:=1;
ioctlsocket(SocketHandle, FIONBIO, ulb);
if Connect(SocketHandle,HSockAddr,sizeof(HSockAddr))=SOCKET_ERROR then
begin
dwError := WSAGetlastError;
if dwError=WSAEWOULDBLOCK then
begin
rtValue := select(SocketHandle,nil,@FdSet,nil,@Time);
if (rtValue=SOCKET_ERROR) or (rtValue=0) then
begin
dwError := WSAGetLastError;
//sendmessage(MainHwnd,WM_SENDCONTROL,i,2);
closesocket(socketHandle);
result := false;
exit;
end;
end
else
begin
closesocket(socketHandle);
result := false;
exit;
end;
end;
end;

封装成OCX后的声明:
function ConnRemote(hostip, port: WideString):WordBool

就把原来的String 改成了:WideString ,boolean改成了WordBool。

就不能连接了,(这个函数是没有问题的,关键就是把String改成了WideString,有问题)
请问朋友,我该怎么解决这个问题。
 
用PChar, int接口函数类型
 
字节大小不一样了,还有就是 string<-->widestring如果codepage不争取设置会出现乱码和&quot;?&quot;
请逐一检查
对不起楼主,代码太长,我没看
 
string和widestring的长度不一样,所包含的字符集也不一样。
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 
我觉得不见得是string、WideString的问题,在一个OCX构件中使用Socket好象有些另外的需要......
 
port改成integer声明啊!传进来的port不都是数字?难道有字母的port存在?自己内部在inttostr用个内部string保存不就得了?
 
同上。。。。。。

hostip改为pchar类型 port改成integer返回值也改成integer
 
时间太久了,但是还是应该把问题说清楚:
只要 HSockAddr.sin_port := htons(strtoint(string(Port)))
即可

注意:string()强制类型转换
 

Similar threads

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