双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

再帮我看看包的问题! 老提示访问内存出错!

kl2000 kl2000 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
unit CommInterface;
//以下是用来测试的代码,可能写得有点乱,望谅解
//这是我定义的接口
interface

uses
Windows, Messages, SysUtils,Classes,ADODB;
type
IMYCommInterFace = interface(IDispatch)
['{768A344C-0331-41A4-87F3-8C2676A982A2}']
function GetAdoCnn: TADOConnection; stdcall;
function GetAdoQuery: TADOQuery; stdcall;
function ExcuteCommand(sSql: String): Boolean; stdcall;
end;
implementation
end.
//以下是接口的实现
unit OperationData;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ADODB,CommInterface;

type
TMYGolbData = class(TComponent,IMYCommInterFace)
private
FAdoCnn: TADOConnection;
FAdoQuery: TADOQuery;
public
function GetAdoCnn: TADOConnection; stdcall;
function GetAdoQuery: TADOQuery; stdcall;
function ExcuteCommand(sSQl: String): Boolean; stdcall;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;

implementation

uses Math, StrUtils, DB;
{ TGolbData }

constructor TMYGolbData.Create(AOwner: TComponent);
begin
inherited;
FAdoCnn := TADOConnection.Create(nil);
FAdoQuery := TADOQuery.Create(nil);
end;


destructor TMYGolbData.Destroy;
begin
FreeAndNil(FAdoQuery);
FreeAndNil(FAdoCnn);
inherited;
end;

function TMYGolbData.ExcuteCommand(sSql: String): Boolean;
begin
FAdoQuery.Connection := GetAdoCnn;
with FAdoQuery do
begin
Close;
SQL.Text := sSQl;
Open;
end;
end;

function TMYGolbData.GetAdoCnn: TADOConnection;
begin
Result := FAdoCnn;
end;

function TMYGolbData.GetAdoQuery: TADOQuery;
begin
Result := FAdoQuery;
end;

initialization
RegisterClass(TMYGolbData);

finalization
UnRegisterClass(TMYGolbData);

end.
//下面则是加载包和调用接口
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, StdCtrls, Buttons,OperationData, ADODB,
CommInterface;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
DataOp: TMYGolbData;
FICommInterFace: IMYCommInterFace;
HPbl:THandle;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

HPbl := LoadPackage('PackOperationData.bpl');
if HPbl1 <> 0 then
DataOp := TMYGolbData(TComponentClass(FindClass('TMYGolbData'))).Create(nil);

FICommInterFace := DataOp as IMYCommInterFace ;
FICommInterFace.GetAdoCnn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
'Persist Security Info=False;Initial Catalog=TEST;Data Source=KK2000';
FICommInterFace.GetAdoCnn.Open;

DataSource1.DataSet := FICommInterFace.GetAdoQuery;
FICommInterFace.ExcuteCommand('select * from Node')

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataOp.Free;
UnloadPackage(HPbl1);
end;

end.
...全文

相关推荐

评论 15
收藏 已收藏
分享
返回顶部
kl2000
Delphi 5,944 成员 262,941 内容