vc 函数原型申明为:
Int ShakeTR ( char *parm );
Int RRecord ( char *parm , char *back );delphi7 中:
Function ShakeTR ( parm : pchar ): Integer; Stdcall; External 'trrx.dll';
Function RRecord (parm : pchar ; back : pchar ): integer; pascal; External 'trrx.dll';调用:
VAR
P,B:PCHAR;
P:='01';Shaketr('01');//没有问题,正常
RRecord('01',B);//结果是他确实运行了,但他会跳个错误出来“ access violation at address 10001813 in module 'trrx.dll'.write of address 00468838”不知道是什么问题。那位大虾帮忙解答以下阿,2天了,急啊。
Int ShakeTR ( char *parm );
Int RRecord ( char *parm , char *back );delphi7 中:
Function ShakeTR ( parm : pchar ): Integer; Stdcall; External 'trrx.dll';
Function RRecord (parm : pchar ; back : pchar ): integer; pascal; External 'trrx.dll';调用:
VAR
P,B:PCHAR;
P:='01';Shaketr('01');//没有问题,正常
RRecord('01',B);//结果是他确实运行了,但他会跳个错误出来“ access violation at address 10001813 in module 'trrx.dll'.write of address 00468838”不知道是什么问题。那位大虾帮忙解答以下阿,2天了,急啊。
Int ShakeTR ( char *parm );
Int RRecord ( char *parm , char *back );delphi7 中:
Function ShakeTR ( parm : pchar ): Integer; Stdcall; External 'trrx.dll';
Function RRecord (parm : pchar ; back : pchar ): integer; STDCALL; External 'trrx.dll';调用:
VAR
P,B:PCHAR;
P:='01';Shaketr('01');//没有问题,正常
RRecord('01',B);//结果是他确实运行了,但他会跳个错误出来“ access violation at address 10001813 in module 'trrx.dll'.write of address 00468838”不知道是什么问题。那位大虾帮忙解答以下阿,2天了,急啊。
可以这样
VAR
P,B:string;
P:='01';Shaketr('01');//没有问题,正常
setleng(B,512);//这个数值根据你dll中的需要定
RRecord('01',pchar(B));
setlength(B,strlen(pchar(B)));
showmesage(B);还 可以这样
可以这样
VAR
P,B:pchar;
P:='01';Shaketr('01');//没有问题,正常
getmem(B,512);
RRecord('01',B);
freemem(ss,512);
showmesage(B);//现在明白delphi中string的好用了吧,呵呵。pchar用起来不方便。
P,B:PCHAR;
P:='01';Shaketr('01');//没有问题,正常
RRecord('01',B);//结果是他确实运行了,但他会跳个错误出来“ access violation at address 10001813 in module 'trrx.dll'.write of address 00468838”需要为PCHAR,分配内存
P:=‘01’系统会分配,
而B没有分配GETMEM(B,1024)
RRecord('01',B);
FREEMEM//
或则定义为CHAR数组,也可以吧
这个函数的back看起来想output参数,你不能传一个空指针,你把pchar指向一个buffer再调。