您的位置:首页 > 编程语言 > VB

VC VB OCX传递参数郁闷记

2015-10-22 11:14 337 查看
这两天,用VC做了一个OCX,其中有一个接口是需要传递出来一个内存文件的,很大,大概有2M左右,因为VB简单,就用VB来调试这个OCX,在传递参数的时候遇到了麻烦。

1.OCX的接口里头参数类型很奇怪,看了半天觉得靠谱的估计也就是BSTR* VARIANT、VARIANT* 这3个,于是先决定使用BSTR*这个数据类型。

在VB里头我定义了一个String类型的参数,VB的自动提示也是String,BSTR*在VB这里是提示String的,于是就这样传递进去了,但是在VC的OCX中使用memcpy老出错,后来发现原来是VC里头的这个指针有问题,把VC的参数前头加了一个*号,但是还是不行,后来才知道,VB中的字符串在VC里头就内存不足了,于是在VB里头还先得让这个字符串占领一定的位置,于是这样写

dim a as string

a="test"+space(6000000) '6M的左右大小

如果用这个还不行dim a as string * 1000

因为这个大小有限制,根本不让你分配6M大小的空间

好了现在空间也分了,指针地址也对了,这回总该行了吧,要不说搞IT就是折腾呢,还是不行

为什么?

首先啊,这个指针传递进去的数据值就不对,我发现这个值应该是unicode了,因为每个字符后头都跟了一个00,比如test吧,就变成了t.e.s.t.这个.就是00,因为我是需要把文件传递出来,说以我可以不管这个传进来的是什么东西,我就直接写吧,好了,等写好了,传递到VB里头一看,晕了,也转化成unicode了,我用了strconv这个函数,可惜转换不过来,一个小小的ocx就这么多问题,真是郁闷至极啊!!!!

经过本人不屑的努力和研究,我使用VC做了一个测试程序,居然完全没有上述的问题,为什么VB你要做unicode转换呢,太让我伤心了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: