zoukankan      html  css  js  c++  java
  • 2015.3.5 VS2005调用VC6 dll 时结构参数的传递

    结构只能以地址方式进行传递,dll只能传递结构不能传递类

    VS端:

     

    [DllImport(@"D:程序VC程序MfcDllspaceDebugspace.dll")]

    private static extern bool PassStruct(IntPtr skintptr);

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

     

    public struct sngk //定义结构

    {

       public double jin ;

       public double wei;

       public int gao;

       public sngk(double j,double w,int g) //VS结构可以包含带参数的构造函数,而VC可以包含不带参数的构造函数

       {

           jin = j;

           wei = w;

           gao = g;

        }

    }

     

    sngk sk = new sngk(50,60,10); //初始化结构

    int size = Marshal.SizeOf(sk); //

    ntPtr objPtr = Marshal.AllocHGlobal(size); //分配内存空间

    Marshal.StructureToPtr(sk, objPtr, false);// 值写入分配的空间

    PassStruct (objPtr); //将结构传入VC++dll端处理

    sk = (sngk)Marshal.PtrToStructure(objPtr, typeof(sngk)); //重新取出处理后的值

    Marshal.FreeHGlobal(objPtr);//释放内存空间

     

    VC++ Dll端:

     

    //#pragma pack(push,1) //这两句据说是为了统一字节大小占一位还是两位,目前去掉也没问题

    struct sngk

    {

        double jin;          

        double wei;

          int gao;

     

          sngk()

          {

               jin=0;

               wei=0;

               gao=0;

          }

    };

    //#pragma pack(pop)

     

    extern "C" __declspec(dllexport) bool fetchInfos(sngk* sk) //只能定义结构指针 补充,也可用&

    {

          sk->jin*=2;

          sk->wei*=2;

          sk->gao*=2;

          return true;

    }

  • 相关阅读:
    企业组织与经营管理
    VS2008试用版到期解决办法
    [分期付款] 建行安居分期,刚申请过,最高额度居然能申请到100万!汗。。
    [手游新项目历程]-29- windows-PC与 linux虚拟机交互
    诛仙手游培元属性
    [Warning] TIMESTAMP with implicit DEFAULT value
    bzoj3631
    bzoj1257
    bzoj1041
    bzoj1560
  • 原文地址:https://www.cnblogs.com/mol1995/p/5964850.html
Copyright © 2011-2022 走看看