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;

    }

  • 相关阅读:
    洛谷-P5357-【模板】AC自动机(二次加强版)
    洛谷-P3796-【模板】AC自动机(加强版)
    洛谷-P3808-【模板】AC自动机(简单版)
    2020 CCPC Wannafly Winter Camp Day2-K-破忒头的匿名信
    zabbix的搭建
    playbook 介绍
    ansible 模块
    shell 脚本判断ip
    shell 脚本安装lnmp
    expect 介绍
  • 原文地址:https://www.cnblogs.com/mol1995/p/5964850.html
Copyright © 2011-2022 走看看