(急)DLL封装ADO操作的超级问题!
用DELPHI开发与ADO相关的DLL,编译DLL成功,但在主程序调用的时候却报错。反复排查,还没能解决错误里的非法指针的问题,因为非常急需,特请各位多多指点,谢谢!
报错如下:
--------------------------------------
Project Project1.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'.
代码如下:
--------------------------------------
library mydb;
uses
base in 'base.pas';
{$R *.res}
exports OpenConn,getConn,CloseConn;
begin
LibIni;
ExitProc := @LibExit;
end.
unit base;
interface
uses
SysUtils, Classes, ActiveX, ADODB;
procedure LibIni;
procedure LibExit;
procedure OpenConn();stdcall;
function getConn():TADOConnection;stdcall;
procedure CloseConn();stdcall;
var
SaveExit:Pointer;
ADOConn: TADOConnection;
ConnectionString: String;
CommandTimeout: Integer;
implementation
procedure LibIni;
begin
CoInitialize(nil);
ConnectionString := getStr('ConnectionString');
CommandTimeout := getInt('CommandTimeout');
SaveExit := ExitProc;
end;
procedure LibExit;
begin
CoUninitialize;
ExitProc := SaveExit;
end;
procedure OpenConn();stdcall;
begin
try
ADOConn := TADOConnection.Create(nil);
ADOConn.ConnectionString := ConnectionString;
ADOConn.CommandTimeout := CommandTimeout;
ADOConn.Connected := True;
ADOConn.Open;
except on E: Exception do
begin
ADOConn.Close;
ADOConn.Free;
end;
end;
end;
function getConn():TADOConnection;stdcall;
begin
Result := ADOConn;
end;
procedure CloseConn();stdcall;
begin
try
ADOConn.Connected := False;
ADOConn.Close;
ADOConn.Free;
ADOConn := nil;
except on E: Exception do
//
end;
end;
end.