从C++ DLL中获取结构数组问题.
寒星 2007-12-28 05:40:25 C++的DLL部分定义如下:
typedef char DBITBLNAME [261];
typedef char DBINAME [32];
#ifndef UINT16
#if defined(__FLAT__)
# define UINT16 unsigned short
#else
# define UINT16 unsigned int
#endif // defined(__FLAT__)
#endif // UINT16
#ifndef INT16
#if defined(__FLAT__)
# define INT16 short
#else
# define INT16 int
#endif // defined(__FLAT__)
#endif // INT16
typedef struct {
DBITBLNAME szName;
UINT16 iFNameSize;
DBINAME szTableType;
UINT16 iFields;
UINT16 iRecSize;
UINT16 iRecBufSize;
UINT16 iKeySize;
UINT16 iIndexes;
UINT16 iValChecks;
UINT16 iRefIntChecks;
UINT16 iBookMarkSize;
short bBookMarkStable;
DBIOpenMode eOpenMode;
DBIShareMode eShareMode;
short bIndexed;
INT16 iSeqNums;
short bSoftDeletes;
short bDeletedOn;
UINT16 iRefRange;
XLTMode exltMode;
UINT16 iRestrVersion;
short bUniDirectional;
PRVType eprvRights;
UINT16 iFmlRights;
UINT16 iPasswords;
UINT16 iCodePage;
short bProtected;
UINT16 iTblLevel;
DBINAME szLangDriver;
short bFieldMap;
UINT16 iBlockSize;
short bStrictRefInt;
UINT16 iFilters ;
short bTempTable ;
UINT16 iUnUsed[16];
} CURProps;
typedef CURProps far *pCURProps;
DBIResult DBIFN DbiGetCursorProps (
hDBICur hCursor,
pCURProps pcurProps
);
VB调用部分代码如下:
Public Type CURProps
szName(1 To 261) As Byte
iFNameSize As Integer
szTableType(1 To 32) As Byte
iFields As Integer
iRecSize As Integer
iRecBufSize As Integer
iKeySize As Integer
iIndexes As Integer
iValChecks As Integer
iRefIntChecks As Integer
iBookMarkSize As Integer
bBookMarkStable As Integer
eOpenMode As DBIOpenMode
eShareMode As DBIShareMode
bIndexed As Integer
iSeqNums As Integer
bSoftDeletes As Integer
bDeletedOn As Integer
iRefRange As Integer
exltMode As XLTMode
iRestrVersion As Integer
bUniDirectional As Integer
eprvRights As PRVType
iFmlRights As Integer
iPasswords As Integer
iCodePage As Integer
bProtected As Integer
iTblLevel As Integer
szLangDriver(1 To 32) As Byte
bFieldMap As Integer
iBlockSize As Integer
bStrictRefInt As Integer
iFilters As Integer
bTempTable As Integer
iUnUsed(1 To 16) As Integer
End Type
Public Declare Function DbiGetCursorProps Lib "IDAPI32.dll" (ByVal hcursor As Long, pcurProps As CURProps) As Integer
运行后发现. CURProps结构中, 数据不对. iFields应该是Field Count, 明明表中只有10个Field, 但得到的数据却是32256. 结构中其他field数据也都不正常, 怀疑是VB对此结构体的定义与C++中的没有对齐, 但实在是找不出哪儿有问题. 请高手赐教! 急等. 多谢了.