Hi Guys
I have built a DLL for Powerbuilder and I tried to calling a function from it, inside of function DLL I have debuged, it just worked fine, but it has crashed after PB called it when PB was complished the program, it's not carshed during calling the function though, the function within VC++ was complex though, it's like
typedef struct query_settle_datail_struct{
const char * setl_optins;
const char * stmt_begndate;
const char * stmt_enddate;
double medfee_sumamt;
double fund_pay_sumamt;
double cash_payamt;
int fixmedins_setl_cnt;
}query_settle_datail_struct;
typedef struct query_file_struct{
char * file_qury_no;
char * filename;
char * fixmedins_code;
char * dld_endtime;
}query_file_struct;
typedef struct upload_file_content_struct{
const char * setl_id;
const char * mdtrt_id;
const char * psn_no;
double medfee_sumamt;
double fund_pay_sumamt;
double acct_pay;
const char * refd_setl_flag;
}upload_file_content_struct;
typedef struct query_settle_datail_ret_struct{
char * psn_no;
char * mdtrt_id;
char * setl_id;
char * msgid;
char * stmt_rslt;
char * refd_setl_flag;
char * memo;
}query_settle_datail_ret_struct;
__declspec(dllexport) int _stdcall querytransettledetail(general_struct & gs,
query_settle_datail_struct & qsds,
int updfilerecordscount,
upload_file_content_struct * updfilecontents,
query_file_struct & updfilestruct,
query_file_struct & dlfilestruct,
int & qsdrrecrodscount,
query_settle_datail_ret_struct * qsdrs,
general_ret_struct & grs);
I tried to decalre it on external function within PB
function long querytransettledetail(general_struct gs, &
query_settle_datail_struct qsds,&
long updfilerecordscount,&
upload_file_content_struct updfilecontents[],&
ref query_file_struct updfilestruct,&
ref query_file_struct dlfilestruct,&
ref long qsdrrecrodscount,&
ref query_settle_datail_ret_struct qsdrs[],&
ref general_ret_struct grs) &
LIBRARY "dgnewsbsapi.dll" Alias for 'querytransettledetail;Ansi'
the code below was what I trying to call this function
query_settle_datail_struct qsds
qsds.setl_optins=dw_3.getitemstring(row,"setl_optins")
qsds.stmt_begndate=string(dw_3.getitemdatetime(row,"stmt_begndate"),"yyyy-mm-dd")
qsds.stmt_enddate=string(dw_3.getitemdatetime(row,"stmt_enddate"),"yyyy-mm-dd")
qsds.medfee_sumamt=dw_3.getitemnumber(row,"medfee_sumamt")
qsds.fund_pay_sumamt=dw_3.getitemnumber(row,"fund_pay_sumamt")
qsds.cash_payamt=dw_3.getitemnumber(row,"cash_payamt")
qsds.fixmedins_setl_cnt=dw_3.getitemnumber(row,"fixmedins_setl_cnt")
long updfilerecordscount
updfilerecordscount=dw_query_detail.rowcount()
upload_file_content_struct updfilecontents[]
for ll_row=1 to updfilerecordscount
updfilecontents[ll_row].setl_id=dw_query_detail.getitemstring(ll_row,"setl_id")
updfilecontents[ll_row].mdtrt_id=dw_query_detail.getitemstring(ll_row,"mdtrt_id")
updfilecontents[ll_row].psn_no=dw_query_detail.getitemstring(ll_row,"psn_no")
updfilecontents[ll_row].medfee_sumamt=dw_query_detail.getitemnumber(ll_row,"medfee_sumamt")
updfilecontents[ll_row].fund_pay_sumamt=dw_query_detail.getitemnumber(ll_row,"fund_pay_sumamt")
updfilecontents[ll_row].acct_pay=dw_query_detail.getitemnumber(ll_row,"acct_pay")
updfilecontents[ll_row].refd_setl_flag=dw_query_detail.getitemstring(ll_row,"refd_setl_flag")
if isnull( updfilecontents[ll_row].refd_setl_flag) or trim(updfilecontents[ll_row].refd_setl_flag)="" then updfilecontents[ll_row].refd_setl_flag="0"
next
query_file_struct updfilestruct
updfilestruct.file_qury_no=space(50)
updfilestruct.filename=space(200)
updfilestruct.fixmedins_code=space(50)
updfilestruct.dld_endtime=space(50)
query_file_struct dlfilestruct
dlfilestruct.file_qury_no=space(50)
dlfilestruct.filename=space(200)
dlfilestruct.fixmedins_code=space(50)
dlfilestruct.dld_endtime=space(50)
long qsdrrecrodscount
qsdrrecrodscount=updfilerecordscount+20
query_settle_datail_ret_struct qsdrs[]
for ll_row=1 to qsdrrecrodscount
qsdrs[ll_row].psn_no=space(30)
qsdrs[ll_row].mdtrt_id=space(30)
qsdrs[ll_row].setl_id=space(30)
qsdrs[ll_row].msgid=space(30)
qsdrs[ll_row].stmt_rslt=space(6)
qsdrs[ll_row].refd_setl_flag=space(3)
qsdrs[ll_row].memo=space(500)
next
ll_result=querytransettledetail( gs1, &
qsds,&
updfilerecordscount,&
updfilecontents,&
updfilestruct,&
dlfilestruct,&
qsdrrecrodscount,&
qsdrs,&
grs1)
if ll_result=0 then
messagebox("ret","calling successful")
else
messagebox("ret","calling failed")
end if
it carshed after it executed the messagebox function,the messagebox pop-up normal but afterward the program carshed, any idea? my speculation was PB crashed when it release the memory