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

解决方案 »

  1.   


    typedef struct tagFS
    {
    double d;
    LONG l;
    };
    Private Type tagFS
      d As Double
      l As Long
    End Type
    这样用就没问题谁能告诉我这是为什么啊。有遇到这种问题的吗
      

  2.   


    估计是对齐问题。试试:typedef struct tagFS
    {
    LONG l;
    LONG reserved;
    double d;
    };Private Type tagFS
      l As Long
      reserved As Long
      d As Double
    End Type
      

  3.   

    VB自定义数据类型的数据顺序必须C结构的顺序对应(名称可以不同,但类型必须相同)
    Private Type tagFS
      d As Double
      l As Long
    End Typetypedef struct tagFS
    {
    LONG l;
    double d;
    };两者的顺序不一样,结果能正确,那真是怪了,你换别的数据试试看,是否都正确?
      

  4.   

    LONG reserved;
    这个是干什么用的?
      

  5.   


    vb和vc的定义顺序要一样,这个是必须的啊
    只是结构体里面定义的double和long的先后顺序不一样,有不一样的结果