首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-08-27 
delphi调用ocx中方法传值的问题本来不会delphi的,但是工作需要,现在需要用delphi写一个程序,从oracle数据

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; 

热点排行