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);
提示尝试读取或写入受保护的内存。这通常指示其他内存已损坏。求大侠帮忙看看是什么原因啊
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);
提示尝试读取或写入受保护的内存。这通常指示其他内存已损坏。求大侠帮忙看看是什么原因啊
public class LastCashCardBalance
{
private Int32 MemberID;
private char[] MemberCode=new char[256];
private DateTime dateValid;
private Int32 Balance;
private Int32 Bottom;
private Int32 Amount;
private Int32 Recycle; public Int32 iMemberID
{
set { MemberID = value; }
get { return MemberID; }
}
public char[] sMemberCode
{
set { MemberCode = value; }
get { return MemberCode; }
} public DateTime sdateValid
{
set { dateValid = value; }
get { return dateValid; }
}
public Int32 iBalance
{
set { Balance = value; }
get { return Balance; }
}
public Int32 iBottom
{
set { Bottom = value; }
get { return Bottom; }
}
public Int32 iAmount
{
set { Amount = value; }
get { return Amount; }
}
public Int32 iRecycle
{
set { Recycle = value; }
get { return Recycle; }
} }
public struct LastCashCardBalance
{
public Int32 iMemberID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst =256)]
public char[] 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(ref LastCashCardBalance s);调用:
LastCashCardBalance lst = new LastCashCardBalance();
GetLastCashCardBalance(ref lst);
可以调用成功了,但是返回值除了iMemberID是正确的,其他都不对,要么是空,要么是0