dll内的函数,进程调用正常,函数调用则使程序关闭!请问为什么?谢谢(100)

  • 主题发起人 juemimima11
  • 开始时间
J

juemimima11

Unregistered / Unconfirmed
GUEST, unregistred user!
dll内的函数,进程调用正常,函数调用则使程序关闭!请问为什么?谢谢///////////////////////////////////////////////以下代码编译生成正常,windows环境下Button1Click结果正常implementationfunction OCR(imgname:string;i:integer):pChar;stdcall;external 'AspriseOCR.dll';{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var PChar_Validation_code:pchar; string_save_Validation_code:string;begin try string_save_Validation_code:='Validation_code.bmp'; PChar_Validation_code:=OCR(string_save_Validation_code,-1); edit1.text:=strpas(PChar_Validation_code); except end;end;///////////////////////////////////////////////以下代码编译生成正常,windows环境下Button1Click则使程序直接关闭,请问什么原因implementationfunction OCR(imgname:string;i:integer):pChar;stdcall;external 'AspriseOCR.dll';{$R *.dfm}function TForm1.Validation_code(string_save_Validation_code:string):string;var PChar_Validation_code:pchar;begin try PChar_Validation_code:=OCR(string_save_Validation_code,-1); result:=strpas(PChar_Validation_code); except result:='失败' end;end;procedure TForm1.Button1Click(Sender: TObject);begin try edit1.text:=Validation_code('Validation_code.bmp'); except end;end;
 
如果我没猜错,你的声明是不正确的,正确的应该为:function OCR(imgname:pChar; i:integer):pChar;stdcall;external 'AspriseOCR.dll';多说一句,用DLL前先看看文档会让你节省100分的
 
to tseug 用produce调用dll函数没问题,用function调用dll函数则异常 这说明声明没问题
 
>用produce调用dll函数没问题,用function调用dll函数则异常 这说明声明没问题这个理由并不充分
 
首先、总的、就事论事地,produce调用不出错,function调用出错,一定是调用方式错误。随后可以分析为什么2种调用会不同,也许函数要求返回,过程可以不理会返回。那么什么调用与stdcall调用在这点上会有差异呢?翻翻帮助,我猜应该是cdcall有这样的特性。tseng判断的错误位置的可能性是存在的,但不是唯一,还可以试一试cdcall调用声明。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
809
import
I
I
回复
0
查看
577
import
I
顶部