首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于调用delphi写的DLL的有关问题,纠结

2013-09-05 
关于调用delphi写的DLL的问题,纠结啊delphi的接口方法是这样的:procedure GetLastCashCardBalance(Card:PT

关于调用delphi写的DLL的问题,纠结啊
delphi的接口方法是这样的:
procedure GetLastCashCardBalance(Card:PTMemberCashCard_Rd);stdcall;
begin
  Card.iMemberID := FPosService.LastCashCardBalance.iMemberID;
  SetPChar(@Card.sMemberCode[0], FPosService.LastCashCardBalance.sMemberCode);
  DateTimeToSystemTime(FPosService.LastCashCardBalance.dateValid,Card.dateValid);
  Card.mBalance := FPosService.LastCashCardBalance.mBalance;
  Card.mBottom := FPosService.LastCashCardBalance.mBottom;
  Card.mAmount := FPosService.LastCashCardBalance.mAmount;
end;
其中PTMemberCashCard_Rd是这么定义的
 { TMemberCashCard = class
    iMemberID: integer;
    sMemberCode: string;
    dateValid: TDate;
    mBalance: TMoney;
    mBottom: TMoney;
    mAmount: TMoney;
    bRecycle: boolean;
  public
    procedure Clear;
  end; }

  TMemberCashCard_Rd =  Record
    iMemberID: integer;
    sMemberCode: Array[0..255] of char;
    dateValid: SystemTime;
    mBalance: integer;
    mBottom: integer;
    mAmount: integer;
    bRecycle: Integer;
  end;

  PTMemberCashCard_Rd =^TMemberCashCard_Rd;

我在C#里的调用方法如下
定义结构
 public struct LastCashCardBalance
        {
            public Int32 iMemberID;
            public string  sMemberCode;
            public DateTime dateValid;
            public Int32 mBalance;
            public Int32 mBottom;
            public Int32 mAmount;
            public Int32 bRecycle;
        } 

 [DllImport("CardInterface.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
  public static extern void GetLastCashCardBalance( LastCashCardBalance s);



调用:
LastCashCardBalance lst = new LastCashCardBalance();
 GetLastCashCardBalance(lst);
提示尝试读取或写入受保护的内存。这通常指示其他内存已损坏。求大侠帮忙看看是什么原因啊

[解决办法]
传参错误  要指针类型
[解决办法]
ref LastCashCardBalance s

另外delphi中不要用string类型,改为array of byte 或 array of char

热点排行