我想用DLL来读写注册表,用来连接数据库,各位给点建议。我下边写的哪里错了?为什么通不过?编译没问题,但是无法正确运行。
DLL文件:
library PDbDll;
uses
SysUtils,Windows,Registry,
Classes;{$R *.res}function GetDataBase(value: integer):string; export;
var
regcode: TRegistry;
begin
if value=1 then
begin
regcode:= TRegistry.Create;
Regcode.RootKey:= HKEY_LOCAL_MACHINE;
if regcode.OpenKey('\system\BloodBank',false) then
result:= regcode.ReadString('database');
end;
end;
exports
GetDataBase;begin
end.
//////////////////////
调用程序
unit UDbTest;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
EdServer: TEdit;
Button1: TButton;
edDataBase: TEdit;
edUserName: TEdit;
edPwd: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}
function GetDataBase(i: integer):string;external'PDbDll.dll';procedure TForm1.Button1Click(Sender: TObject);
var
ii0:integer;
begin
ii0:=1;
edDataBase.Text:= GetDataBase(ii0);
end;end.
/////////////////////
谢谢!
DLL文件:
library PDbDll;
uses
SysUtils,Windows,Registry,
Classes;{$R *.res}function GetDataBase(value: integer):string; export;
var
regcode: TRegistry;
begin
if value=1 then
begin
regcode:= TRegistry.Create;
Regcode.RootKey:= HKEY_LOCAL_MACHINE;
if regcode.OpenKey('\system\BloodBank',false) then
result:= regcode.ReadString('database');
end;
end;
exports
GetDataBase;begin
end.
//////////////////////
调用程序
unit UDbTest;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
EdServer: TEdit;
Button1: TButton;
edDataBase: TEdit;
edUserName: TEdit;
edPwd: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
{$R *.dfm}
function GetDataBase(i: integer):string;external'PDbDll.dll';procedure TForm1.Button1Click(Sender: TObject);
var
ii0:integer;
begin
ii0:=1;
edDataBase.Text:= GetDataBase(ii0);
end;end.
/////////////////////
谢谢!
解决方案 »
- 高薪招聘 delphi 程序员 (深圳)
- 為什麼我的SQL執行語句會出錯
- 怎样让messagebox分多行显示消息?
- 在project中的source源程序中能否用判断语句及加子函数?
- Help!!!!!!!!!!!!!
- 请教一个问题,如何关闭一个动态创建的窗体(通过点击窗体上的按钮 )?谢谢了!
- 招聘,,delphi+sql server+沈阳
- 关于 2进制 文件的读写 和 图形的绘制
- sender 和原对象怎么不一致了
- while或repeat提前返回的语句是什么,相当于C中的continue和break;
- ----------请问如何把多个TFileStream用TList保存?---------------
- 基于HTTP的QQ协议之我所见
http://community.csdn.net/Expert/topic/4242/4242766.xml?temp=.3676264Procedure WriteReg; //写注册表
var
reg:Tregistry;
vServerName, vDataBase, vSa, vPass : String;
begin
reg:=Tregistry.create;
reg.rootkey:=HKEY_LOCAL_MACHINE;
if reg.openkey('\SOFTWARE\MYSOFT',False) then
begin
end
else begin
reg.openkey('\SOFTWARE\MYSOFT',True);
reg.WriteString('vServerName','MYServer');
Reg.WriteString('vDataBase','DataTest');
Reg.WriteString('vSa','sa');
Reg.WriteString('vPass','123456');
reg.closekey;
end;
Reg.Free;
end;Procedure ReadReg; //读注册表
var
reg:Tregistry;
vServerName, vDataBase, vSa, vPass : String;
begin
reg:=Tregistry.create;
reg.rootkey:=HKEY_LOCAL_MACHINE;
if reg.openkey('\SOFTWARE\MYSOFT',False) then
begin
end
else begin
reg.openkey('\SOFTWARE\MYSOFT',True);
vServer := reg.ReadString()('vServerName');
vDataBase := reg.ReadString('vDataBase');
vSa := Reg.ReadString('vSa');
vPass :=Reg.ReadString('vPass');
reg.closekey;
end;
Reg.Free;
end;
library PDbDll;uses
SysUtils,Windows,Registry,
Classes;{$R *.res}function GetDataBase(value: boolean):string;stdcall; export;
var
regcode: TRegistry;
begin
if value=True then
begin
regcode:= TRegistry.Create;
Regcode.RootKey:= HKEY_LOCAL_MACHINE;
if regcode.OpenKey('\SoftWare\BloodBank',false) then
result:= regcode.ReadString('database');
regcode.CloseKey;
regcode.Free;
end;
end;
调用方:
unit UDbTest;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
EdServer: TEdit;
Button1: TButton;
edDataBase: TEdit;
edUserName: TEdit;
edPwd: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
function GetDataBase(i: boolean):string;stdcall;external'PDbDll.dll' ;{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ii: Boolean;
begin
ii:=True; edDataBase.Text:= GetDataBase(ii);
end;end.
//////////////////
调用的结果都对的,但是提示:Invalid pointer operation.
function GetDataBase(i: integer):PCHAR