• 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;

    }

  • 相关阅读:
    gnuplot learn note
    command line text process
    raspberry pi boot without HDMI
    gnuplot运行方式
    读取外部excel文件
    DB2中Lob is closed. ERRORCODE=4470的解决
    Myeclipse项目编码
    Json使用
    数组元素全排列递归算法
    XmlHttpRequest IE 乱码问题
  • 原文地址:https://www.cnblogs.com/mol1995/p/5964850.html
Copyright © 2020-2023  润新知