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

jack_zhong 2005-01-17 08:25:15
我的程序在进入第二个窗体时就出错了,从代码上看不出任何问题.
主:
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;
请大家帮帮我,谢谢大家了!分不够,可以再加
...全文
315 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
有可能是DLL的事,我去了DLL,就不出错了,请问大家,这个DLL加载后用什么方式卸载?FreeLibrary行不通
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
  • 打赏
  • 举报
回复
我的程序是模型為 MDI形式,我的开发思路是登录窗体和主窗体(MDI窗体)在一个EXE中,下分16个模块(也就是16个子程序),每个模块都是一套独立的程序,以DLL方式调入主窗体,每个子模块还分NN个子窗体,来进行日常业务处理.
yqdragon 2005-01-17
  • 打赏
  • 举报
回复
1、先将你调用DLL数据库的几句注释掉,看有无错误,确定错误是否和DLL相关
2、若和DLL相关,修改函数function D_AdoConStr:string;stdcall;External'Module_fun.dll';
将string改为pchar,函数内容相应的修改。
调用时AdoConStr:=StrPas(D_AdoConStr);

附:function StrPas(const Str: PChar): string;
function Pchar(const Str: string): Pchar;
zl54 2005-01-17
  • 打赏
  • 举报
回复
把OnCreate中的代码全部放到OnShow中试一下。
有些控件还没有创建就调用了
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
没有,我没定义数组,只有dll
rj058005 2005-01-17
  • 打赏
  • 举报
回复
不知道你有没有定义一个数组,我上次遇到invalid pointer opertaion这个提示是因为数组初始化的错误,代码如下:
var
allcount: array [0..15] of integer;
sumcount: array [0..5] of integer;
for i:=0 to 15 do
begin
allcount[i]:=0;
sumcount[i]:=0;
end;
错的原因是两个数组长度不同
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
错误还是一样啊
yqdragon 2005-01-17
  • 打赏
  • 举报
回复
有什么提示错误啊?如果不用DLL,直接连接会不会出错
function D_AdoConStr:string;stdcall;External'Module_fun.dll';
将DLL中的返回类型改为Pchar
jack_zhong 2005-01-17
  • 打赏
  • 举报
回复
是在procedure Tlogfrm.FormCreate(Sender: TObject);里的代码全都执行完后出的错

2,496

社区成员

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

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