现用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;怎么做才正确呢?请高手指点,谢谢!
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;怎么做才正确呢?请高手指点,谢谢!
怎么做呢,能说明一下吗?
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);
1.personinfo = new (PersonInfo);//语法并未出错
2.去掉personinfo = new (PersonInfo);则明显personinfo未分配内存,肯定出错。