社区
VB基础类
帖子详情
vb调c++ dll如何传参数
qwpacs
2009-09-02 10:28:57
c++原型
void XXXX (unsigned char *i_xml,unsigned char **o_xml)
//i_xml是字符串指针,o_xml是字符串指针地址--在c++中分配空间。
用Private Declare Sub XXXX Lib "YYY.dll" (ByVal strXMLIN As String, ByRef strXMLOUT As String) 不行
...全文
129
7
打赏
收藏
vb调c++ dll如何传参数
c++原型 void XXXX (unsigned char *i_xml,unsigned char **o_xml) //i_xml是字符串指针,o_xml是字符串指针地址--在c++中分配空间。 用Private Declare Sub XXXX Lib "YYY.dll" (ByVal strXMLIN As String, ByRef strXMLOUT As String) 不行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Tiger_Zhao
2009-09-02
打赏
举报
回复
1)用 CopyMemory 从 指针的指针 中取得 指针
2)用 lstrlen 取得长度
3)用 VB 的 Space() 函数分配字符串空间
4)用 lstrcpy 复制字符串。
但是
,c++中分配的字符串没有释放!
qwpacs
2009-09-02
打赏
举报
回复
现在传回的值是一串数字,头大啊。
qwpacs
2009-09-02
打赏
举报
回复
[Quote=引用 2 楼 tiger_zhao 的回复:]
strXMLOUT 可以用 Long 表示指针。
但是不建议在c++中分配空间,容易引起内存泄漏之类的问题。
[/Quote]
是啊,可以用long传回指针,但传回的指针如何转回字符串,程序里要用,请指教?
Tiger_Zhao
2009-09-02
打赏
举报
回复
strXMLOUT 可以用 Long 表示指针。
但是不建议在c++中分配空间,容易引起内存泄漏之类的问题。
xzz1008
2009-09-02
打赏
举报
回复
用long
Tiger_Zhao
2009-09-02
打赏
举报
回复
VB 调用 API 会自动对字符串参数进行 Unicode-Ansi 转换,见这个
帖子
。
lyserver
2009-09-02
打赏
举报
回复
string不是unsigned char *,而是BSTR,一是二者编码不同,unsigned char *是ANSI编码,string是UNICODE编码,二是二者内存布局不同,unsigned char *是直接指向字符串,并以"\0"结束,而string指向字符串内存后移4个字节后的地址,前4个字节用来表示string长度,没有使用"\0"表示结束,换句话说,unsigned char *不能包含"\0"符号,而string可以包含一个或多个"\0"。
此外,还需要注意string的内存释放,如果一定要传入string,则不能在dll里释放该内存,否则会导致两次内存释放,而出现未知错误。
当然,最好的办法是要么使用byte()来表示unsigned char *,要么修改dll中的unsigned char *为BSTR,然后在dll内部转换BSTR为unsigned char *。
VB
调
用
c++
写的
Dll
的一点总结
最近,写了一个
VB
应用程序,这个APP主要是用来演示三个
C++
写的视频处理动态链接库的使用方式。第一次写
VB
的代码,确实遇到了很多问题,现在回想一下,真的是很多东西走了或多或少的弯路,现在把这些东西总结并记录下来,期望以后写兼容
VB
的动态库,可以注意接口的定义,并不是所有的接口定义方式,都方便
VB
使用,再者,就是在
VB
中使用的一些知识积累。
C++
写的
DLL
接口定义需注意的事项1.
C++
写的
DLL
,传结构给
VB
用
由于某些情况下,我们需要用CB或是VC写一个
DLL
,而
调
用它的确实
VB
。这里特别强
调
一下使用标准
数
据类型的问题,就是说用
C++
写的东西,导出的函
数
最好使用标准的int,char,long,double...标准类型以及他们的指针。很多人都强
调
过这个问题。但是我最近遇到一个需要
VB
传结构给CB做的
DLL
,然后
数
据返回到结构的情况。typedef struct Xtest{char a[100];ch
VB
等语言与
C++
DLL
的通讯
VB
等语言
调
用
C++
DLL
DLL
(dynamic-link library)是一个包含一个或多个被编译、链接的函
数
/模块的文件, 并和
调
用它的进程分开存储。当使用者进程启动或运行时,操作系统负责把
DLL
映射到
调
用者进程的内存地址空间里。采用
DLL
技术,可以提高软件模块的重用性(
DLL
调
用者可以不太关心该
DLL
是用何种语言写的)并起到保护源代码的目的,同时又能减少最终
vb
下
调
用
C++
dll
的方法
VB
下
调
用
dll
的函
数
必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函
数
声明到
VB
中,供
VB
程序
调
用。 语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参
数
AS类型]),或为Declare Function函
数
名Lib [Alias " 别名]([ByVal 参
数
AS类型])AS类型在声明中首
VB
和Dev-
C++
合作——手把手教你写GUI程序
声明此文的读者定为C语言初学者。此文介绍的技巧适用于开发迷你型项目或自娱自乐的玩具程序,正规的项目中可能不会采用。读者可以抱着茶余饭后休闲娱乐的心态来围观,至于CLI、GUI等名词解释请参看百度百科。转载请保留此声明和原作者redraiment,谢谢!正文诱人的GUI程序程序的作用就是化繁为简,让计算机高效地帮我们完成枯燥的工作。写程序最大的动力就是你精心设计的程序能获得大家的认可
VB基础类
7,787
社区成员
197,583
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章