主窗体 方法DeCodeMethod(IMSI:PChar; StartDate:PChar; LastDays:Integer):String;
其中调用C语言 dll中一个方法, 返回一个字符串 str在子窗体中 调用主窗体方法DeCodeMethod 得到返回的str , 采用ShowMessage(Str) 正确没问题!
采用Self.Edit.Text:=Str; 就产生一个 access violation atox00452d25...错误 , 百思不得其解.....
求原因 求办法....
其中调用C语言 dll中一个方法, 返回一个字符串 str在子窗体中 调用主窗体方法DeCodeMethod 得到返回的str , 采用ShowMessage(Str) 正确没问题!
采用Self.Edit.Text:=Str; 就产生一个 access violation atox00452d25...错误 , 百思不得其解.....
求原因 求办法....
解决方案 »
- C++
- 一简单的串口问题
- 如何使用Delphi捕捉其他程序的热键?
- 向web服务器发送一条含有参数的URL,服务器接收到将查询的结果用xml形式返回,应该如何去写,希望同仁帮忙,最好能给出例程,谢谢,收到
- NT服务不能读写注册表吗?
- D7中用来打开html文件的组件是什么?
- 工作找到了,是用delphi写数据库和接口方面的东西,就是工资很低啊!
- SQL怎样才能把查出的表中,在DBGRID同一个字段中,只显示相同记录名字的第一个,如下:
- 请问:我一执行程序整个FORM就不能动了,须完成后才能做下一动作,怎么样才能在执行的过程中设个按钮把它终止?
- (150分)有没有人会啊。记录结构变了,读写如何一一对应呢?150分那。
- dxtreelist数据量大,5000条,循环表示很慢。
- 如何控制条码抢
而直接ShowMessage(Str) 缺是正常结果....
Type
TDeCodeMethod=Function( const imsi:PChar; Const start_date:PChar; days:Integer; out_str: PChar):Integer;stdcall;
Var
tmpInt:Integer;
tmpStr:String;
DeCodePChar:PChar;
DeCodeMethod:TDeCodeMethod;
DeCodeHandle:Thandle;
Begin tmpInt:=-1;
tmpStr:='';
GetMem(DeCodePChar,65); //动态申请内存空间 65字符 Try
DeCodeHandle:=LoadLibrary('BdEncrypterLib.dll'); //加载外部解码动态链接库
@DecodeMethod:=GetProcAddress(DeCodeHandle,'EncryptData'); //绑定动态链接库中的方法
if(Assigned(@DecodeMethod)) then begin //如果关联成功
tmpInt:=DeCodeMethod(IMSI, StartDate, LastDays, DeCodePChar); //调用方法
tmpStr:=DeCodePChar;
end;
Finally
FreeLibrary(DeCodeHandle); //释放当前句柄
FreeMem(DeCodePChar); //释放内存空间
End; if(tmpInt<>-1) then begin
//解码入库 记录**********************************************************
end else begin
ShowMessage('青蛙友情提示:'+#13+#10+'解码错误,请确认手机IMSI 起始日期 持续时间!');
end;
Result:=tmpStr;
End;
Var
tmpStr:String;
Begin
tmpStr:=MsgCatFrm.DeCodeMethod(PChar('2222'),PChar('20120203'),360);
ShowMessage(tmpStr);//正确 "slfowenfia13k492923u4"
Self.Edit1.Text:=tmpStr;//错误
Self.Memo1.Text:=tmpStr;//错误
Self.Memo1.Lines.add(tmpStr);//错误
End;
showmessage(inttostr(length(tmpstr))); 是多少?
强制转换了一下 还是错误!测了N久 发现:在子窗体 的某个事件中 只要调用了主窗体方法 ,获得了正常的返回值 tmpStr 之后,
接着对子窗体控件的操作就都失败了! 如:
tmpStr:=MsgCatFrm.DeCodeMethod(PChar('2222'),PChar('20120203'),360);
ShowMessage(tmpStr);//正确 "slfowenfia13k492923u4"
Self.Edit1.Text:='想不通';//依然 产生地址错误
Self.Edit1.Text:=tmpStr;//会产生地址错误返回值 tmpStr 没问题 可以从新赋值 或存入数据库.....
再求答案.....
若报错,表示form2未建立,或者建立了但在调用主窗体方法时(是否还有其它的代码),被关了
你直接给Self.Edit1.Text:=‘你有病呀’
看会不会出错。
如果出错的话可以肯定你把Self用错了。或者Edit1根本没创建
这实在太坑爹了......折腾了我两天!
比我老板那SB的办法好 让我先存到数据库 再从数据库 提取!(都快把我给吹死了)!
问题是解决了 可这是为什么呢! 咋用了 主窗体那个方法后 用self 就成这样了....