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');程序就自动关闭了。
谁能告诉我如何解决
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');程序就自动关闭了。
谁能告诉我如何解决
确定是到这步吗?
而且你这个函数怎么没有默认返回值?
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;我刚才调试看了一下,都能执行完,但是程序也就关闭了。