我在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请那位高手指点。最好帮我调试好,谢谢!

解决方案 »

  1.   

    不好意思,我把Declare贴错了。应该是:
    Declare Function cardconfig1 Lib "aa.dll" (dd1 As config) As config
      

  2.   

    1. 最好不要返回结构体,返回指针比较好
    2. Integer类型可能存在对齐的问题。你的VB里面的类型声明改成这样试试:
    Type config
        intermit As Integer
        spacer As Integer
        address As Integer
        spacer2 As Integer
    End Type不需要给spacer(2)赋值。3. 注意unsigned。
      

  3.   

    你的问题没试过,给你一个建议
    可以把动态库函数参数定义成指针类型struct config *dd1,然后在vb里是按引用调用该函数,也可以实现你的功能
      

  4.   

    豆子说得对,我弱了……还是自己创建一个结构体,然后把指针传进去,在函数体内部改。大多数API都是这样处理的(譬如GetWindowRect)。