要调用一个delphi写的dll,接口函数如下 Type
    TUserApply = Record
      i_AreaCode:   Integer;   //分区号
      str_UserNo:   String[6]; //用户号
      i_AlarmValue: Integer;   //报警水量
      i_InputValue: Integer;   //充值限额
      i_OverLimit:  Integer;   //透支限额
      i_Times:      Integer;   //购水次数
      i_Buy:        Integer    //本次购水量
    End;
    PUserApply = ^TUserApply;
 
  //购水卡返写区结构
  Type
    TUserReturn = Record
      str_Mark:  String[2]; //返写标志
      i_Left:    Integer;   //剩余水量
      e_SumUsed: Extended;   //表累计用水量
      str_State: String[2]; //水表工作状态字
    End;
    PUserReturn = ^TUserReturn;
 
Function ReadUser_RFS(str_RunKey: String;UserApply: PUserApply;UserReturn: PUserReturn;Var i_Error: Integer):Boolean;stdcall; external 'LKWMRF.dll';我在c++中定义对应结构体struct USER_CARD_INFO
{
int nAreaCode;//分区号
char szUserNO[6];//用户号
int nAlarm; //报警水量
int nUpperLimit;//充值限额
int nOverdraw;//透支限额
int nTime; //购水次数
int nBuy; //本次购水量};
typedef BYTE Extended[10];
struct USER_CARD_RETURN
{
char szMark[2];//返写标志
int nLeft;//剩余水量
Extended ldSumUsed;//表累计用水量
char szState[2];//水表工作状态字
};
typedef BOOL (__stdcall *PReadUser)(char*,USER_CARD_INFO*,USER_CARD_RETURN*,int&);LoadLibrary,GetProcAddress执行都是正确的,调用,出现0xC0000005异常。
求大神!

解决方案 »

  1.   

    我勒个去!写DLL那个人有问题吧,明知string是DELPHI专有的还将它定义到接口!这个DLL只供DELPHI使用
      

  2.   

    String[6]; //用户号
    改成 :array [0..5] of AnsiChar;
    其他同样改
      

  3.   


    现在我没有dll的源码,我能不能直接在外面套一层,把接口换了?
      

  4.   

    用DELPHI再写个DLL,调用那个接口,并把string改成PChar
      

  5.   

    UserNO : String[6];
    = C中的
    {
    byte bSize;
    char szUserNO[6];
    }
    在C里面多定义一个字节,并且在赋值后,把长度写入第一个字节即可
      

  6.   

    delphi 定义接口有问题
    Function ReadUser_RFS(str_RunKey: String;UserApply: PUserApply;UserReturn: PUserReturn;Var i_Error: Integer):Boolean;stdcall; external 'LKWMRF.dll';
    str_RunKey: String 要定义为 :str_RunKey: Pchar