读书人

delphi调用ocx中方法传值的有关问题

发布时间: 2012-08-27 21:21:56 作者: rapoo

delphi调用ocx中方法传值的问题
本来不会delphi的,但是工作需要,现在需要用delphi写一个程序,从oracle数据库中取一个clob字段,然后调用某ocx控件中的方法,
ocx中函数原型是
long Verify(short * storedata, long length)
在delphi中引入控件后,调用的函数为
Integer Verify(var stroedata:Smallint, length:Integer)
从数据库中取出的clob我定义了一个String保存
var zw : String
zw := ADOQuery1.FieldByName('zw').AsString;
stroedata应该是zw的地址吧
但是现在我怎么可以把zw搞成Smallint类型的地址传进去
可以帮帮我吗 谢谢了

[解决办法]
var zw : Integer;
zw := StrToInt(ADOQuery1.FieldByName('zw').AsString);

这样就行了,不过
Smallint是16进制有符号整数
Integer是32进制有符号整数

看你需要使用吧
[解决办法]
二进制字段 AsString可能会丢失数据,最好是SaveToStream保存到内存流中,
还有一个Blob字段不大可能保存一个SmallInt的数据(才2字节呀),因此我想OCX中应该是要求传递这个数据的首地址,如果推测没错,那么就

Delphi(Pascal) code
var  MS : TMemoryStream;begin  MS := TMemoryStream.Create;  TBlobField(ADOQuery1.FieldByName('zw')).SaveToStream(MS);  Verify(PSmallint(MS.Memory)^ , MS.Size);  MS.Free;//这里不确定是否该释放,因为不知道OCX中是否复制了数据过去,          //如果复制了可以释放,否则结束时再释放end; 

读书人网 >.NET

热点推荐