vba调用c++的dll时,参数是指针数组,无法匹配.求助!

illfar 2009-08-18 11:17:07
c++代码:long functionA (class a, struct1 *IDINFO, struct2 * NameINFO)
{
...
a->add(IDINFO,NameINFO);
...
}
IDINF是入力的,NameINFO是出力的,主要问题是NameINFO这个结构体里有数组指针
struce NameINFO
{
wchar * STR[11]
long num
}


VBA代码:
Private Declare Function functionA Lib "functionA.dll" (ByVal objptr As Long, ByRef ID As IDINFO, ByRef Name As NameINFO) As Long

在vba中定义了这个结构体
Private Type NameINFO
str(1 To 11) As String
num As Long
End Type

然后用vba调用这个函数后,原来在c++里时,STR[1]到[11]里面是放的字符串,如

STR[1]是"我们"

STR[1]是"agd"
....
可是vba出来后,值感觉都只有2个字符了
STR[1]是"w."
STR[1]是"a."
....

感觉应该是vba接口这个函数时,结构体定义时的类型和c++的不匹配吧
但不知道则么改
请教高手,急!!
...全文
254 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengyl01 2009-09-07
  • 打赏
  • 举报
回复
用CopyMemory将指针转换为字符串可还是不行
Saingel 2009-08-21
  • 打赏
  • 举报
回复
class a不是引用,也不是指针,vb应该不能调,
除非用vC再包一层去掉第一个参数。。。。
bdzwj 2009-08-20
  • 打赏
  • 举报
回复
http://hi.baidu.com/kyky6/blog/item/095626974e0bf36854fb9632.html
threenewbee 2009-08-19
  • 打赏
  • 举报
回复
Private Type NameINFO
str As String * 11
num As Long
End Type
illfar 2009-08-19
  • 打赏
  • 举报
回复
还是不行呀
出来的是数字2089552
bdzwj 2009-08-19
  • 打赏
  • 举报
回复
Private Type NameINFO
str(1 To 11) As long
num As Long
End Type

dim s1 as string
dim info as nameinfo
s1 = "adb"

info.str(1) = strptr(s1)
illfar 2009-08-19
  • 打赏
  • 举报
回复
试过的
不行
字符串不对的,有“.”的乱码
我字符串因该有中文字的
而且这样改了,后面的num值也不对了
illfar 2009-08-19
  • 打赏
  • 举报
回复
vb里则么转换阿
bdzwj 2009-08-19
  • 打赏
  • 举报
回复
晕, NameINFO结构中的str声明的是长整型,那只是保存了一个指针, 如果你想显示字符串,那需要将指针转换为字符串
illfar 2009-08-19
  • 打赏
  • 举报
回复
7楼出来答案
str都是long型的一串数字
illfar 2009-08-19
  • 打赏
  • 举报
回复
按照3楼的做法
dim s1 as string
dim info as nameinfo
s1 = "adb"
info.str(1) = strptr(s1)

functionA(Long, IDINFO, info)

info是输出的
可是这样,里面的str(1)等的值还不对,像被截了都只有2位
bdzwj 2009-08-19
  • 打赏
  • 举报
回复
那试试下面的代码

Private Type NameINFO
str(1 To 11) As long
num As Long
End Type

dim s1 as string
dim s() as byte
dim info as nameinfo
s1 = "adb"

s = s1
info.str(1) = varptr(s(0))
illfar 2009-08-19
  • 打赏
  • 举报
回复
还是不行啊
感觉出来是被截取的字符串
是不是和wchar 有关阿
bigriverhorse 2009-08-19
  • 打赏
  • 举报
回复
3楼的应该没有错误,

我倒是觉得是楼主的DLL代码存储时用错了,

要确定这个问题,就要看看楼主用C++时,是怎么调用DLL的呢,贴出来看看?

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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