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天了,急啊。

解决方案 »

  1.   

    应该是这样的也不行: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; 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天了,急啊。
      

  2.   

    pchar只个指针。就像楼上所说的物理地址未分配,在dll中你就对它进行操作,所以报错了。
    可以这样
    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用起来不方便。
      

  3.   

    VAR
    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数组,也可以吧
      

  4.   

    Int RRecord ( char *parm , char *back );
    这个函数的back看起来想output参数,你不能传一个空指针,你把pchar指向一个buffer再调。
      

  5.   

    char  buf[1024]定义  fun(data:pchar);fun(@buf[0]);操作权限  1024 字节
      

  6.   

    sharemem的问题吗?引用一下这个文件
      

  7.   

    对于dll中的字符串一定要用pchar来做为参数,这是值得肯定的,既然是pchar,在使用的时候就要给它分配内存空间.