我想了解一些这方面的知识,本人一点也不知道!!我现在要调用delphi写的DLL,里面的一个函数的返回值就是一个结构
但是,我按照这种结构用c++重新定义了一下,定义了一个该结构体的变量,用来接收这个函数中的该结构的返回,但是结果...是不是就是因为delphi和vc中“字节对齐”不一样的原因呢

解决方案 »

  1.   

    的确是这样。
    如果用vc的话,你可这样设置:
    project菜单->settings->c/c++标签->category组合框中选择:code generation.这时你会看到"struct member alignment"字样,你可以从它下面的组合框中选为1byte,这样就等于没有字节对齐的影响了。
      

  2.   

    那么,前面我所说的,调用delphi写的dll中那个结构的问题
    是不是和字节对齐有关呢??或者应该如何在vc中解决这个问题呢
    dll中的输出函数的那个输入的结构变量是用delphi写的
    那我在vc调用这个函数时,也要传入这个参数,应该怎么解决?
      

  3.   

    字节对齐应该是编译器优化的问题,只的是结构的地址从16的倍数开始和结束,不足的字节编译器为你补齐看看<c++ 模型...>明自己不起来了  侯捷翻译的
      

  4.   

    可以自行控制编译器:
    #pragma pack( [ n1] )
    ....
    code
    ....
    #pragma pack( [ n2] )
    n1 n2就是你指定的字节对齐常量。
    详见msdn
      

  5.   

    字节对齐对程序的移植性也很重要
    在VC下是这样设置的
    alt+F7→C/C++→Category→Code generation→Struct menber alignment.其中有好几个选项,不一定是按16个字节来补齐的。
    如果你想让你的结构最小,就按从大到小的顺序定义其成员
      

  6.   

    知道了,谢谢大家的指点!!
    特别感谢andy_lau提供了学习的资料名