各位大侠,救命啊!又是invalid pointer opertaion问题

jack_zhong 2005-01-17 08:34:25
我的程序在进入第二个窗体时就出错了,从代码上看不出任何问题.
主:
uses
Forms,
Windows,
SysUtils,
attemper in 'ATTEMPER.pas' {MDI},
logform in 'LOGFORM.PAS' {logfrm};

{$R *.res}
Var
hMutex:HWND;
Ret:Integer;

begin
hMutex:=CreateMutex(nil,False,'轮驳公司辅助管理系统');
Ret:=GetLastError;
If Ret<>ERROR_ALREADY_EXISTS Then
begin
Application.Initialize;
Application.Title := '轮驳公司辅助管理系统';
Application.CreateForm(TMDI, MDI);
Application.CreateForm(Tlogfrm, logfrm);
Application.Run;
end else
Application.MessageBox('程序已经运行!','请注意!',MB_OK);
ReleaseMutex(hMutex);
end.

登录窗体:
{$R *.dfm}

function D_AdoConStr:string;stdcall;External'Module_fun.dll';



procedure Tlogfrm.BitBtn6Click(Sender: TObject);
begin
close;
end;

procedure Tlogfrm.FormCreate(Sender: TObject);
var
AdoConStr:string;
begin
//加载窗体信息;
logfrm.Width:=448;
logfrm.Height:=289;
logfrm.Left:=225;
logfrm.Top:=153;

ADOConnection.ConnectionString:='';
AdoConStr:=D_AdoConStr;
ADOConnection.ConnectionString:=AdoConStr;

ADOConnection.Connected:=true;

classfalse;

GroupBox2.Left:=99;
GroupBox2.Top:=0;
GroupBox1.Left:=99;
GroupBox1.Top:=-4;

//SetWindowPos(logfrm.handle,HWND_TOPMOST, logfrm.Left, logfrm.Top, logfrm.Width, logfrm.Height,0);

end;
是在procedure Tlogfrm.FormCreate(Sender: TObject);里的代码全都执行完后出的错
请大家帮帮我,谢谢大家了!分不够,可以再加
...全文
234 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
这是DLL部分的函数:
function D_AdoConStr:pchar;stdcall;
var
Inf_file:Tinifile;
con_pas,con_use,con_db,con_ip:string;
begin
Inf_file:= Tinifile.Create('.\info.ini');
result :='Provider=SQLOLEDB.1;'
+ 'Password=' + Inf_file.ReadString('Connect','Password',con_pas) + ';'
+ 'Persist Security Info=True;'
+ 'User ID=' + Inf_file.ReadString('Connect','User ID',con_use) + ';'
+ 'Initial Catalog=' + Inf_file.ReadString('Connect','Initial Catalog',con_db) + ';'
+ 'Data Source=' + Inf_file.ReadString('Connect','Data Source',con_ip) +';';
end;
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
classfalse是个用户权限的管理
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
我的程序是模型為 MDI形式,不过这个错误是我昨天刚刚出现的,以前这个主程序里调用了好多Dll子窗体都没事,可能不是MDI的事,我的开发思路是登录窗体和主窗体(MDI窗体)在一个EXE中,下分16个模块(也就是16个子程序),每个模块都是一套独立的程序,以DLL方式调入主窗体,每个子模块还分NN个子窗体,来进行日常业务处理.
yuvotesyg518 2005-01-17
  • 打赏
  • 举报
回复
突然想起来,是不是你的
ADOConnection还没有被创建完就被调用了??

这个我不太确定,可以把语句:
ADOConnection.ConnectionString:='';
AdoConStr:=D_AdoConStr;
ADOConnection.ConnectionString:=AdoConStr;
ADOConnection.Connected:=true
放到FormActivate中去试一下。

另外问一下,classfalse一句是干什么用的?
zl54 2005-01-17
  • 打赏
  • 举报
回复
把OnCreate中的代码全部拷贝到OnShow中试试
beyondtkl 2005-01-17
  • 打赏
  • 举报
回复
Application.CreateForm(TMDI, MDI);
Application.CreateForm(Tlogfrm, logfrm);


// 是不是你得模型為 MDI形式得??
那你MDI有沒有處理好?? 你先屏蔽 下面這句代碼 試試
yuvotesyg518 2005-01-17
  • 打赏
  • 举报
回复
搞不定了,不过我倒是可以教给你一个调试方法。

把事件处理过程
procedure Tlogfrm.FormCreate(Sender: TObject);
中的语句按某种顺序依次去掉,直到不再出现错误为止。
我想,到那时错误的原因就不说自明了吧!
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
还有,可能错误不在hMutex吧,我都要崩溃了
yuvotesyg518 2005-01-17
  • 打赏
  • 举报
回复
我一直认为就是这个东西搞的,怎么还是不行呢??
这样,把
CloseHandle(hMutex);
这一句提前到下面这一句
Application.Initialize;
之前,你再试试吧!

If Ret<>ERROR_ALREADY_EXISTS Then
begin
CloseHandle(hMutex);
Application.Initialize;
...
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
时出的
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
错误在 Application.CreateForm(Tlogfrm, logfrm);
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
不行,还是出同样的错误啊
yuvotesyg518 2005-01-17
  • 打赏
  • 举报
回复
一旦不再需要,注意必须用CloseHandle函数将互斥体句柄关闭。从属于它的所有句柄都被关闭后,就会删除对象。进程中止前,一定要释放互斥体,如不慎未采取这个措施,就会将这个互斥体标记为废弃,并自动释放所有权。共享这个互斥体的其他应用程序也许仍然能够用它,但会接收到一个废弃状态信息,指出上一个所有进程未能正常关闭。这种状况是否会造成影响取决于所涉及的具体程序。

下面这一句:
ReleaseMutex(hMutex);
改成:
CloseHandle(hMutex);
试试!

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧