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转换呢,太让我伤心了
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转换呢,太让我伤心了
相关文章推荐
- VB错误处理机制
- 【用EXCEL VBA控制IE】 2-1:EXCEL VBA对IE控制的基本操作-用IE访问某URL
- VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)
- VB ICO图表文件无效修正
- DVB机顶盒的概念与分类
- Filter/replace - VBA
- bat vbs后台运行
- VBI数据广播
- VBS中传值与传址的区别
- 【原创】VB超强游戏外挂帮助类,封装了很多方法
- 【用EXCEL VBA控制IE】 之一:IE控制的准备(库的添加)
- 【用EXCEL VBA控制IE】 之写在前面
- VBA运算符
- vbox中centeos 虚拟机共享window7主机文件夹
- 利用Excel VBA批量计算气象数据多个台站多年来春季和冬季降水量和平均气温
- VB编程小练习
- vbs学到的几个常用函数
- VB源代码
- VBScript基础
- vb实例