vc代码
typedef struct tagFS
{
LONG l;
double d;
};BOOL __stdcall FSME_FS(tagFS* pTagFs)
{
FILE* f;
f=fopen("D:/out1.txt","w");
fprintf(f,"%s%.17g\n","d:",pTagFs->d);
fprintf(f,"%s%d\n","l:",pTagFs->l);
fclose(f);
return TRUE;
}vb代码
Private Type tagFS
l As Long
d As Double
End Type
Private Declare Function FSME_FS Lib "FSMobileExchange.dll" (ByRef pFS As tagFS) As BooleanDim bRet As Boolean
Dim pFS As tagFS
pFS.d = 22.22
pFS.l = 2222bRet = FSME_FS(pFS)结果错误:
d:5.3225454133869018e-315
l:2222
typedef struct tagFS
{
double d;
LONG l;
};
Private Type tagFS
d As Double
l As Long
End Type
这样用就没问题谁能告诉我这是为什么啊。有遇到这种问题的吗
估计是对齐问题。试试:typedef struct tagFS
{
LONG l;
LONG reserved;
double d;
};Private Type tagFS
l As Long
reserved As Long
d As Double
End Type
Private Type tagFS
d As Double
l As Long
End Typetypedef struct tagFS
{
LONG l;
double d;
};两者的顺序不一样,结果能正确,那真是怪了,你换别的数据试试看,是否都正确?
这个是干什么用的?
vb和vc的定义顺序要一样,这个是必须的啊
只是结构体里面定义的double和long的先后顺序不一样,有不一样的结果