在VB中向VC做的DLL中传递结构体的问题,求助!

pijiupaopao 2005-03-19 10:26:57
我在VB中向VC做的DLL中传递结构体。例如我船入实参dd1,在DLL中处理好后存入dd并返回,可结果不对啊!
VB中代码:
Declare Function cardconfig1 Lib "aa.dll" (dd1 As config, dd As config) As config
Type config
intermit As Integer
address As Integer
End Type
'-------------------------------------
Private Sub Command1_Click()
Dim dd1 As config,dd as config
dd1.intermit = 100
dd1.address = 200
dd = cardconfig1(dd1)
Print dd1.intermit
Print dd1.address
Print dd.intermit
Print dd.address
End sub
'=======================================
VC做的DLL中的代码:
//aa.cpp
#include "dllZZW.h"
struct config WINAPI cardconfig1(struct config dd1)
{
cardconfig1.intermit =dd1.intermit+1;
cardconfig1.address =dd1.address+1;
return dd;
}

//dllZZW.h
#ifndef dllZZW_H_H
#define dllZZW_H_H
struct config
{
unsigned short int intermit;
unsigned short int address;
} card_config;

#endif dllZZW_H_H

//aa.def
LIBRARY "aa"
DESCRIPTION 'aa Windows Dynamic Link Library'
EXPORTS cardconfig1

请那位高手指点。最好帮我调试好,谢谢!
...全文
69 点赞 收藏 6
写回复
6 条回复
pigpag 2005年03月26日
豆子说得对,我弱了……

还是自己创建一个结构体,然后把指针传进去,在函数体内部改。大多数API都是这样处理的(譬如GetWindowRect)。
回复 点赞
pijiupaopao 2005年03月19日
up
回复 点赞
pijiupaopao 2005年03月19日
不好意思,我把Declare贴错了。应该是:
Declare Function cardconfig1 Lib "aa.dll" (dd1 As config) As config
回复 点赞
supergreenbean 2005年03月19日
你函数返回时,临时变量已经被释放了,所以你不能得到正确结果。
你要么就直接传结构指针进去,然后直接在函数中修改结构内容。如果返回指针也不是太好,因为你要调用后还要自己释放这块内存,否则调用多了,内存泄漏就不可避免了。
回复 点赞
hawkoffree 2005年03月19日
你的问题没试过,给你一个建议
可以把动态库函数参数定义成指针类型struct config *dd1,然后在vb里是按引用调用该函数,也可以实现你的功能
回复 点赞
pigpag 2005年03月19日
1. 最好不要返回结构体,返回指针比较好
2. Integer类型可能存在对齐的问题。你的VB里面的类型声明改成这样试试:
Type config
intermit As Integer
spacer As Integer
address As Integer
spacer2 As Integer
End Type

不需要给spacer(2)赋值。

3. 注意unsigned。

回复 点赞
发动态
发帖子
VB基础类
创建于2007-09-28

2748

社区成员

19.7w+

社区内容

VB 基础类
社区公告
暂无公告