我想写一个dll来实现给一个datasource赋值;
dll的程序如下:
library Project1;{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {DataModule1: TDataModule};{$R *.res}exports
ReturnRecord;begin
end.unit Unit1;interfaceuses
SysUtils, Classes, DB, ADODB;type
TDataModule1 = class(TDataModule)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
private
{ Private declarations }
public
{ Public declarations } end;var
DataModule1: TDataModule1;
procedure ReturnRecord(var DataSource:TDataSource);stdcall;
implementation{$R *.dfm}procedure ReturnRecord(var DataSource:TDataSource);
begin
DataSource.DataSet:=DataModule1.ADOTable1;
end;
end.调用它的程序如下:
unit Unit11;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, StdCtrls;type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; procedure ReturnRecord(var DataSource:TDataSource);stdcall external 'E:\杂例\3\Project1.dll';
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ReturnRecord(DataSource1);
end;end.
但是运行时出错!
请高手指教!!多谢!!
dll的程序如下:
library Project1;{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {DataModule1: TDataModule};{$R *.res}exports
ReturnRecord;begin
end.unit Unit1;interfaceuses
SysUtils, Classes, DB, ADODB;type
TDataModule1 = class(TDataModule)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
private
{ Private declarations }
public
{ Public declarations } end;var
DataModule1: TDataModule1;
procedure ReturnRecord(var DataSource:TDataSource);stdcall;
implementation{$R *.dfm}procedure ReturnRecord(var DataSource:TDataSource);
begin
DataSource.DataSet:=DataModule1.ADOTable1;
end;
end.调用它的程序如下:
unit Unit11;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, StdCtrls;type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; procedure ReturnRecord(var DataSource:TDataSource);stdcall external 'E:\杂例\3\Project1.dll';
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
ReturnRecord(DataSource1);
end;end.
但是运行时出错!
请高手指教!!多谢!!
解决方案 »
- 赚分帖~~~
- DBGridEh 随机选中多行 如何得到选中行某一列的值
- 有需要兼职的朋友可以进来看看(广州)
- 请问怎样取得 TdxDBGrid 多选行(MultiSelect)的各行各字段的值?
- 如何隐藏引用程序
- 满分:求INDY中的 TidTcp 控件对文件传输的操作。
- 如何用程序读出邮件的正文内容以及其他属性?急急急!
- 小软件发布(可以写日记、听mp3、通讯录、理财、提醒)兼散分,敬请意见于我,谢谢各位同仁们啦!
- 为什么这个窗体没有show就自动显示出来了
- delphibbs.com为什么关闭了啊?
- aiirii(ari-爱的眼睛) , wnhoo(e梦缘) 请来接分!
- midas是中间件吗?
procedure TForm1.Button1Click(Sender: TObject);
var
db:TDataSource;
begin
db:=nil;
ReturnRecord(db);
if assigned(db) then
dbgrid1.DataSource:=db
else
showmessage('对象未生成');
end;
(ReturnRecord(var DataSource:TDataSource);)。我也是先
写成函数,再想把它写到dll中去,就出了此问题。