往DLL动态库函数传送对象时出错
在一个DLL项目中申明以下函数,这样对吗?
function fBool_ExistMDIForm(MainForm,MDIForm:TForm):Boolean;stdcall;
//MainForm为MDI主表单,MDIForm为MDI子表单
var
i:Integer;
begin
i:=0;
while i<MainForm.MDIChildCount do
begin
begin
if MainForm.MDIChildren[i].Name=MDIForm.Name then
break //如果找着同名的子表单则程序退出循环
else
i:=i+1;
end;
end; if MainForm.MDIChildren[i].Name=MDIForm.Name then
Result:=True //找到同名的表单返回真,否则退回假
else
Result:=False;
end;调用方式在MDI子表单的OnActivate代码中调用,Form1是MDI主表单名
if fBool_ExistMDIForm(Form1,self) then
begin
showmessage('已经运行了一个实例');
end;程序在运行时报错 Access violation at address 00281f0e in modul 'XXXXXX.DLL'. Read of address 00000008
在一个DLL项目中申明以下函数,这样对吗?
function fBool_ExistMDIForm(MainForm,MDIForm:TForm):Boolean;stdcall;
//MainForm为MDI主表单,MDIForm为MDI子表单
var
i:Integer;
begin
i:=0;
while i<MainForm.MDIChildCount do
begin
begin
if MainForm.MDIChildren[i].Name=MDIForm.Name then
break //如果找着同名的子表单则程序退出循环
else
i:=i+1;
end;
end; if MainForm.MDIChildren[i].Name=MDIForm.Name then
Result:=True //找到同名的表单返回真,否则退回假
else
Result:=False;
end;调用方式在MDI子表单的OnActivate代码中调用,Form1是MDI主表单名
if fBool_ExistMDIForm(Form1,self) then
begin
showmessage('已经运行了一个实例');
end;程序在运行时报错 Access violation at address 00281f0e in modul 'XXXXXX.DLL'. Read of address 00000008
解决方案 »
- 大家帮忙看一下这段代码有什么错误,关于Pchar类型的
- 求助:我有一个 OpenDialog1 和一个 RichEdit1, 怎么把文本文件的内容读到RichEdit1啊?谢谢!
- 怎样用POP3收取已经阅读过的邮件?
- treeview onCustomDrawItem报错
- 如何在16位操作系统下面(WIN3.1)使用压缩功能?如何重新整理zlib?
- 我的ToolButton怎么了?
- 数据更新问题(问题解决立马结帖)
- 很菜的rave问题,各位大虾帮忙!
- pankun(剑神一笑 ^_^)最近好活跃啊!也一下子升星了。恭喜
- 请大家帮忙看看,如何解决此问题?。。。。。。
- 关于SQL Server2000和Delphi做的数据库打包的问题
- 请教各位,如何用程序制作中文内容的PDF?
Result:=True //找到同名的表单返回真,否则退回假
else
Result:=False;
____________________
改成 i<mainform.mdichildcount then
result:=true
else
result:=false;
function fBool_ExistMDIForm(MainForm,MDIFormclassname : pchar):Boolean;stdcall;
var
i : integer;
begin
result := false;
for i := 0 to mainform.childcount - 1 do
//classname 代表类名
if mdichildren[i].classname = mdiformclassname then
begin
mdichildren[i].bringtofront;
result := true;
break;
end;
if not result then
begin
.... //创建窗体的语句
result := true;
end;
end;
在interface处声明一个变量:
interface
var
midform : tmdiform;
oldapp : tapplication;function fBool_ExistMDIForm(app:Tapplication;MDIFormclassname : pchar):Boolean;stdcall;
... //初始化部份,判断窗体是否存在
if not assigned(oldapp) then
begin
oldapp := application;
application := app;
end;
...
mdiform := tmidform.create(app.mainform); //修改createform的语句
...
end;