2015.3.5 VS2005调用VC6 dll 时结构参数的传递

Posted mol1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2015.3.5 VS2005调用VC6 dll 时结构参数的传递相关的知识,希望对你有一定的参考价值。

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

VS端:

 

[DllImport(@"D:\程序\VC程序\MfcDllspace\Debug\space.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;

}

以上是关于2015.3.5 VS2005调用VC6 dll 时结构参数的传递的主要内容,如果未能解决你的问题,请参考以下文章

VC6.0编译DLL,使用VS2010调用问题及解决方法

VS2008 exe-VC6 dll互操作性

2015.3.4 VS2005调用MFC dll时报错及解决

无法在 DLL 'kernel32.dll' 中找到名为 'InterlockedIncrement' 的入口点 - VS2005@Win7 64 位

2015.3.3 VC6调用dll

LoadRunner 调用Dll