调用dll时,使用了它的两个函数,为什么执行第二个时
提示错误:'Invalid pointer operation'?

解决方案 »

  1.   

    无效的指针操作,估计你调用函数时方法有错误;一种可能就是函数的参数你弄错了,或者你的dll没有注册。
     *个人意见,仅供参考*
      

  2.   

    错! 错! 错!原因出在下面这一句:
       Result := StrResult;
    即在返回时返回一个字符串, 在动态库中不能这么做.原因很简单: 返回的字符串是在 Dll 中分配的, 在退出程序时, 主线程自动去释放字符串占用的内存空间, 而字符串的内存空间是属于 Dll 的, 这样就产生了地址越界释放的异常.应该如此改:// 增加一个释放字符串指针的函数
    procedure DeleteStrPointer(AValue: PChar); stdcall;
    begin
       if Assigned(AValue) then
          try
             StrDispose(AValue);
          except
          end;
    end;function EncryStrHex(Str, Key: PChar): PChar; stdcall;
    begin
       // ... ...   // 返回动态分配的字符串
       result := StrNew(PChar(strResult));
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
       pchResult: PChar;
    begin
       pchResult := EncryStrHex(PChar(Edit1.Text), PChar(Edit1.Text));
       Edit4.Text := StrPas(pchResult);   // 别忘了调用释放字符串指针
       DeleteStrPointer(pchResult);
    end;
      

  3.   

    http://expert.csdn.net/Expert/topic/2266/2266900.xml?temp=.1576044