我的程序在进入第二个窗体时就出错了,从代码上看不出任何问题.
主:
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;
请大家帮帮我,谢谢大家了!分不够,可以再加

解决方案 »

  1.   

    是在procedure Tlogfrm.FormCreate(Sender: TObject);里的代码全都执行完后出的错
      

  2.   

    有什么提示错误啊?如果不用DLL,直接连接会不会出错
    function D_AdoConStr:string;stdcall;External'Module_fun.dll';
    将DLL中的返回类型改为Pchar
      

  3.   

    不知道你有没有定义一个数组,我上次遇到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;
    错的原因是两个数组长度不同
      

  4.   

    把OnCreate中的代码全部放到OnShow中试一下。
    有些控件还没有创建就调用了
      

  5.   

    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;
      

  6.   

    我的程序是模型為 MDI形式,我的开发思路是登录窗体和主窗体(MDI窗体)在一个EXE中,下分16个模块(也就是16个子程序),每个模块都是一套独立的程序,以DLL方式调入主窗体,每个子模块还分NN个子窗体,来进行日常业务处理.
      

  7.   

    这是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;
      

  8.   

    有可能是DLL的事,我去了DLL,就不出错了,请问大家,这个DLL加载后用什么方式卸载?FreeLibrary行不通