Dll : VC开发的Dll在VB中调用的参数问题(char*)!!!

gxqcdit 2003-11-07 03:11:00

我用VC开发了一个常规动态连接库.
其中某输出函数的参数为char* :
extern "C" __declspec(dllexport) void OpenMyFile(char* strFile);

在VB中我是如下用的:
...
Private Declare Function OpenMyFile Lib "Capturer.dll" (ByVal strFile As String) As Long
...

在打开文件按钮的事件中:
Dim sFile As String
sFile = "C:\\a.avi"
OpenMyFile sFile // 此语句报错!!!!!!!!!!!!!!!!!!!!!!!!!!1
...

大侠们 help.

注: 我用VC调用该动态库无任何问题.
...全文
34 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxldd 2003-11-10
  • 打赏
  • 举报
回复
Private Sub Command30_Click(Index As Integer)

End Sub
因为你定义了一个控件数组 index 为索引
yunfeng007 2003-11-10
  • 打赏
  • 举报
回复
关键是函数导出约定

楼上说的是对的

_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。

VB只支持_stdcall

现在知道了吗
cctv512 2003-11-10
  • 打赏
  • 举报
回复
VC中的输出函数应为__stdcall调用.
yunfeng007 2003-11-07
  • 打赏
  • 举报
回复
控件数组的下标
gxqcdit 2003-11-07
  • 打赏
  • 举报
回复
谢谢诸位大侠:
还有个入门级问题:
对一个按钮Click操作而有系统产生的代码中有默认的参数(Index As Integer)是什么意思?
Private Sub Command30_Click(Index As Integer) //

End Sub
这里的Index As Integer是什么意思啊?
???
射天狼 2003-11-07
  • 打赏
  • 举报
回复
指针类型声明的是要用BYREF(按地址传送)
hiker_lx 2003-11-07
  • 打赏
  • 举报
回复
你vc要得到的是指向字符串的指针,所以申明的时候应该用ByRef。如下:
Private Declare Function OpenMyFile Lib "Capturer.dll" (ByRef strFile As String) As Long
gxqcdit 2003-11-07
  • 打赏
  • 举报
回复
VC的字串和VC的有什么不同吗?

7,772

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧