谁用过追捕的数据库开发过ip地址查询工具? 能讲讲吗? (100分)

  • 主题发起人 主题发起人 bborn
  • 开始时间 开始时间
一个晚上也没能搞定。<br>到底改怎么写成C++ Builder 形式呢?
 
sorry,<br>俺只会用delphi,而且参数的类型是我废了好大劲才是出来的。<br>ipsearch。dll是vc编的,而delphi调用vc的dll参数的类型有事很难对应起来。<br>用vb,c++ builder的朋友只好自己试了,帮不上什么忙。<br>soory.<br><br>哦,stdcall参数指名调用函数时参数的入栈顺序采用c的顺序,不进行优化(大概是这样)<br>只能帮这些了。
 
要不,我说一下具体的过程吧。<br>方法是传递一个指向ip地址(以null结尾的字符串)的指针给_GetAddress,函数会返回指向物理地址字符串(如"河北省",以null结尾)的指针。<br>说过了,delphi调用c的函数,参数类型有时很难对应。本想用pchar的,可会发生"无效的指针操作",试了很多次才试出用array [0..15] of char可行。<br>vb,c++ builder就依照上述的原理自己是吧。
 
知道是VC写的DLL就好办多了。谢谢,我再试。
 
这个ipsearcher好像有几个不同的版本,不知大侠用的是哪个版本?<br>我试了一天还是不对。返回的是乱字符。<br>
 
不需要调外部方法,这里给出完全 Delphi 源码(测试通过!)<br>1.放一个 TTable 控件,放一个 TEdit 里面是型如“202.010.100.96”这样的地址。<br>2.把wry.dll 拷到当前目录下改成成 wry.dbf,表 Table1的表名设成 wry.dbf<br>3.Table1.active := true;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; &nbsp;i &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: integer;<br>&nbsp; &nbsp;s &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: string;<br>begin<br>&nbsp; &nbsp;with Table1 do<br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; First;<br>&nbsp; &nbsp; &nbsp; for i := 0 to RecordCount - 1 do<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Edit1.Text &gt;= FieldByName('STARTIP').AsString)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and (Edit1.Text &lt;= FieldByName('ENDIP').AsString) then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s := ('国家:' + FieldByName('COUNTRY').AsString +<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#13#10'位置:' + FieldByName('LOCAL').AsString +<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#13#10'提供者:' + FieldByName('THANK').AsString);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;next;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp;end;<br>&nbsp; &nbsp;ShowMessage(s);<br>end;<br>看,因为 wry 里的sub地址是3位数的,所以可以直接用字符串比较,简单吧:)<br>另外,目前 Edit1 地址要是3位的补0的,(即061.010.050.001),实现<br>普通的地址补0并不难,这里就不写了。另外,wry 里的地址还可以先排序,<br>用二分法或建索引提高速度,这里只是一个示例。不过我跑了一下也挺快的,不到1秒。<br>:)
 
多人接受答案了。
 
摆平了。<br>http://vip.6to23.com/NowCan1/tech/ipsearch.htm<br>C++ Builder的。<br>VB的还是不会。
 
后退
顶部