我的DLL的加载为:
[DllImport("TerAccDll.dll", EntryPoint="ExpandData",CharSet=CharSet.Auto,CallingConvention=CallingConvention.ThisCall)] public static extern int ExpandData (int dType,char* pData,ref RecData pRecData);结构体为:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
public struct RecData 
{
public string RecType;
public string CardNo;
public DateTime RecTime;
public float Fare;
public float Balance;
public int CardType;
public int MealType;
public string OperNo;
}请问怎么初始化结构体RecData  使之能够作为参数 传进ExpandData函数中 啊?
请指教

解决方案 »

  1.   

    to 请问怎么初始化结构体RecData 使之能够作为参数 传进ExpandData函数中 啊?什么意思?
    如下这样?
    RecData myRecData = new RecData();
    myRecData.RecType = "test";
    ……
      

  2.   

    Knight94(愚翁)大哥 你对[DllImport("TerAccDll.dll", EntryPoint="ExpandData",CharSet=CharSet.Auto,CallingConvention=CallingConvention.ThisCall)] public static extern int ExpandData (int dType,char* pData,ref RecData pRecData);
    中的属性设置熟悉吗?
    如果参数里有指针变量 必须设置CallingConvention=CallingConvention.ThisCall,否则参数传递会出错。
    这回参数里有结构体 原来的这些设置 又导致参数到DLL函数里的值发生了变化。这会肯定又是这些设置的问题。
    请问 参数里有结构体 结构体指针时[DllImport("TerAccDll.dll", EntryPoint="ExpandData",CharSet=CharSet.Auto,CallingConvention=CallingConvention.ThisCall)] public static extern int ExpandData (int dType,char* pData,ref RecData pRecData);
    里的这些设置应该怎么样啊?
      

  3.   

    一般对于CallingConvention是不需要设置的,即默认为stdcall,所以一般写dll的时候需要加上stdcall标示。
      

  4.   

    还有你在定义RecData 不要定义charset属性,除非确实如此。
      

  5.   

    在dll中RecData 如何定义的。