Structure Alignment

I have a problem using structs, when calling a function written in C from
a LLVM function or calling a LLVM function from a C one.
I noticed that the LLVM align double with 4 bytes and our run time routines
use 8, in MS Windows.
If a use #pragma pack(4) in my C programs, the routines run fine, but
I must ensure that all external call should use the #pragma directive.

If I change the llvm layout f64:64:64, the LLVM calls C functions and
the struct is OK, in the C side, but the getelemntptr fails in LLVM side.
Is there on way to ensure that the LLVM reads the correct memory position
in this case?

//#pragma pack(4)
struct xfirstStru
    int var1;
    double var2;
    int var3;
    char *var4;
typedef struct xfirstStru osX ;
typedef struct xfirstStru* PosX ;
//#pragma pack()
extern "C" int testOSX( PosX osx )
    printf("\nChamada C %d %f %d %s",++osx->var1,++osx->var2,++osx->var3,osx->var4);
    return 999;

it was
... f64:32:64 ...
and I changed it to
... f64:64:64 ...

%struct.VAR1. = getelementptr %FIRSTSTRU.* %OUTRASTRU., i32 0, i32 0 ; <i32*> [#uses=2] %loadX = load i32* %struct.el.VAR1., align 4 ; <i32> [#uses=1]
here the first element is OK
%struct.el.VAR2. = getelementptr %FIRSTSTRU.* %OUTRASTRU., i32 0, i32 1 ; <i32*> [#uses=2] %loadX = load double* %struct.el.VAR2., align 8 ; <double> [#uses=1]
here, the second is wrong

Manoel Teixeira