如何在dll中创建wsocket空间呢?急!!! (50分)

  • 主题发起人 主题发起人 尘封
  • 开始时间 开始时间

尘封

Unregistered / Unconfirmed
GUEST, unregistred user!
我在调用dll时,出现错误。代码如下:

library API;

{$DEFINE API}
uses
SysUtils,
Classes,
wSocket, //是ics控见包中的
TYPE ; //接口文件

Function Connect(gw_ip,port,username,passwd: String):integer;StdCall;
var
Socket1:TWSocket;
begin
Socket1.Port:=port;
Socket1.Addr:=gw_ip;
Socket1.Proto:='tcp';
Socket1.Connect;
Result:=1;
end;

exports
Connect;
end.

每次调用都会出现错误!
 
不要在dll中使用string作为参数传递,
虽然可以通过把ShareMem作为uses的第一个unit来解决,但是最好不要用string作为
函数参数使用。可以用Pchar类型传递
当然,dll内部可以用string(全局与局部变量),但与外部发生联系的函数参数和返回类型不要用string
 
你这个问题是一个内存错误,就是在每次调用你的dll 中,要记住在程序结束后,释放内存
方法如下:
try
Handle:= LoadLibrary('user32.dll');
.....
finally
FreeLibrary(Handle);
end;
另外用socket连接是最后是不是要断开连接。
 
除了string是个问题之外(这个记得要整改,改成PChar传递)
还有啊,你用Socket1不用创建的?Socket1:=TWSocket.Create(nil); 啊
最后用完了记得 Socket1.Free 啊
 
还是不行,看来dll里封装空间是很困难的了。那只有传递socket句柄了
 
不会,可以啊。
现在我的看法是,你在exe是怎么声明dll中的Connect函数的?是不是
Function Connect(……):integer;StdCall;external 'xxx.dll';
注意exe中"stdcall"必不可少
注意参数……和dll里面完全一致
 
后退
顶部