用于C ++ DLL函数的封送C#结构

时间:2015-08-26 11:42:33

标签: c# c++ dll struct marshalling

我有一个c ++ dll函数,它将一个指向此结构的指针作为参数:

struct tLBCSHREP_PARAMS
{
  BYTE Ps;
  char* Shift;
  char* Cashier;
  char* CashRegNr;
};

,其中BYTE是一个8位整数。

我在C#代码中调用这个c ++函数。我为该c ++结构创建了C#等价物:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct tLBCSHREP_PARAMS
    {
        public byte Ps;
        public IntPtr Shift;
        public IntPtr Cashier;
        public IntPtr CashRegNr;
    };

我正在创建这个结构的instatce,然后是一个指针:

tLBCSHREP_PARAMS p_tLBCSHREP_PARAMS = new tLBCSHREP_PARAMS();
 p_tLBCSHREP_PARAMS = rapkas;

 rapkas.Ps = (byte)ps;
 rapkas.Shift =  Marshal.StringToHGlobalAnsi(shift);
 rapkas.Cashier = Marshal.StringToHGlobalAnsi(cashier);
 rapkas.CashRegNr = Marshal.StringToHGlobalAnsi(cashregnr);

IntPtr ptrLBTSRLN = Marshal.AllocHGlobal(Marshal.SizeOf(rapkas));
Marshal.StructureToPtr(rapkas, ptrLBTSRLN, false);

将指针传递给dll函数后,我得到错误:0xC0000001。据我所知,它意味着分段错误,所以可能没有正确地创建struct。 我已尝试多次向struct添加不同的属性, 添加' [MarshalAs(UnmanagedType.U1)]'公共字节P之前的短语;'变量等等。什么都没有用;(

0 个答案:

没有答案