现用Delphi创建一DLL,其中有一个记录集如下:
TStringOfChar = array [0..99] of char;TPersonInfo = record
  PSN_ID : Integer;
  PSN_No : Integer; 
  PSN_NAME : TStringOfChar;
  Sex : TStringOfChar;
  IDCARD : TStringOfChar;
  PSN_STS : TStringOfChar;
  PSN_TYP : TStringOfChar;
  UNIT_CODE : TStringOfChar;
  UNIT_NAME : TStringOfChar;
  OFFICAL_TYP : TStringOfChar;
  HAI_TYP : TStringOfChar;
  ACCT_STS : TStringOfChar;
  HI_ACCT_PWD : TStringOfChar;
  SILL_PAY_AMT_TOTAL : Single;
  SILL_YR_FUND_AMT : Single;
  YR_FUND_AMT : Single;
  HAI_YR_HIGH_AMT : Single;
  HAI_YR_INBED_AMT : Single;
  GZ_CUR_AMT : Single;
  YR_INBED_CNT : integer;
  Card_No : TStringOfChar;
end;
函数:
function GetPersonInfo(var APersonInfo: TPersonInfo): Boolean;
export; stdcall;现我在VC++6.0中这样调用:
struct PersonInfo
{
long int PSN_ID;
long int PSN_NO;
char PSN_NAME[100];
char Sex[100];
char IDCARD[100];
char PSN_STS[100];
char PSN_TYP[100];
char UNIT_CODE[100];
char UNIT_NAME[100];
char OFFICAL_TYP[100];
char HAI_TYP[100];
char ACCT_STS[100];
char HI_ACCT_PWD[100];
float SILL_PAY_AMT_TOTAL;
float SILL_YR_FUND_AMT;
float YR_FUND_AMT;
float HAI_YR_HIGH_AMT;
float HAI_YR_INBED_AMT;
float GZ_CUR_AMT;
long int YR_INBED_CNT;
char Card_No[100];
};HINSTANCE hInst;
hInst = LoadLibrary("Mydll.dll");
PersonInfo *personinfo;
bool (__stdcall *GetPersonInfo)(PersonInfo);
GetPersonInfo = (bool (__stdcall *)(PersonInfo))GetProcAddress(hInst, "GetPersonInfo");
personinfo = new (PersonInfo);
if (GetPersonInfo(*personinfo))  //在这句时报地址错误,退出!
AfxMessageBox("获取个人基本信息成功!", 0, 0);
else
AfxMessageBox("获取个人基本信息失败!", 0, 0);
delete personinfo;怎么做才正确呢?请高手指点,谢谢!

解决方案 »

  1.   

    注意Delphi和Vc之间参数类型的不同和调用约定
      

  2.   

    to oyljerry(☆勇敢的心☆-要开始写论文了):
        怎么做呢,能说明一下吗?
      

  3.   

    personinfo = new (PersonInfo); //语法错不要分配空间传进去看看
      

  4.   

    HINSTANCE hInst;
    hInst = LoadLibrary("Mydll.dll");
    PersonInfo *personinfo = NULL;
    bool (__stdcall *GetPersonInfo)(PersonInfo);
    GetPersonInfo = (bool (__stdcall *)(PersonInfo))GetProcAddress(hInst, "GetPersonInfo");
    //personinfo = new (PersonInfo);
    if (GetPersonInfo(*personinfo))  //在这句时报地址错误,退出!
    AfxMessageBox("获取个人基本信息成功!", 0, 0);
    else
    AfxMessageBox("获取个人基本信息失败!", 0, 0);
      

  5.   

    to Caps77(二两指针) :
       1.personinfo = new (PersonInfo);//语法并未出错
       2.去掉personinfo = new (PersonInfo);则明显personinfo未分配内存,肯定出错。