dll 函数代码如下
Function AccessCreateDatabase(Const DataBase, PassWord: PChar): boolean;
    Stdcall;
Var
    STempFileName: String;
    vCatalog: OleVariant;
Begin
    STempFileName := GetTempPathFileName;
    Try
        vCatalog := CreateOleObject('ADOX.Catalog');
        vCatalog.Create(format(SConnectionString, [STempFileName, PassWord]));
        result := CopyFile(PChar(STempFileName), PChar(DataBase), True);
        DeleteFile(STempFileName);
    Except
        result := false;
    End;
End;我调试发现执行vCatalog := CreateOleObject('ADOX.Catalog');程序就自动关闭了。
谁能告诉我如何解决

解决方案 »

  1.   

    用了except应该不会吧??
    确定是到这步吗?
    而且你这个函数怎么没有默认返回值?
      

  2.   

    调用dll单元的源码:
        TAccessCreateDatabase = Function(Const DataBase, PassWord: PChar): Boolean;
    var
        AccessCreateDatabase: TAccessCreateDatabase;
    Procedure TfrmMain.Button1Click(Sender: TObject);
    Var
        h: THandle;
    Begin
        ChDir(ExtractFilePath(Application.ExeName));
        h := LoadLibrary('utils.dll');
        If (h <> 0) Then
        Begin
            Try
                CoInitialize(nil);
                @AccessCreateDatabase := GetProcAddress(h, 'AccessCreateDatabase');
                ShowMessage('a');
                If (@AccessCreateDatabase <> Nil) Then
                Begin
                    AccessCreateDatabase(PChar(GetCurrentDir + '\test.gfs'), '123');
                End;
                ShowMessage('b');
                CoUninitialize;
            Finally
                ShowMessage('c');
                FreeLibrary(h);
            End;
            ShowMessage('d');
        End;
    End;我刚才调试看了一下,都能执行完,但是程序也就关闭了。