我的程序1,可以运行
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ConnFilesM(pw,user,db,computer:string) stdcall;external 'bin\ConnDBDll.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ConnFilesM('a','a','a','a');
end;
end.
http://bbs.csdn.net/topics/60297694
----------==========
http://hi.baidu.com/xingfupingguo/item/8735f87def880a28d6a89c20
定义常量可以在type上 ,变量可以在 private public 或者protect里定义。或者在implement上的var里定义全局变量
unit PubSQL;
interface
uses Windows, Forms, PubParaLib, SysUtils, Dialogs, DB, ADODB, StdCtrls, PubDataModul;
type
TGetDataSet = procedure(var ADOQuery:TADOQuery; SQL:String); Stdcall;
TGetTextData = function(ID:Integer; StrList:Array of String):String; Stdcall;
TGetSQLText = Function(Sn, ID:Integer): String; Stdcall;
TStratDataList = Procedure(ADOConn: TADOConnection; UserName: String); Stdcall;
function _CuTextData(ID:Integer; StrList:Array of String):String;
function _CuSQLData(SQLType: TCuSQLServerType; ID: Integer): string;
procedure GetNewDataSet(var ADOQuery:TADOQuery; SQL:String);
function GetNewTextData(ID:Integer; StrList:Array of String):String;
function GetNewSQLText(Sn, ID:Integer):String;
Procedure OpenTextDataList;
var
TextHandle:THandle;
implementation
就是定义一个类型,跟字符串,整型等等一样,都是一种类型。不过它就一个函数类型,多用于属性。常看到的,例如你看OnClick事件,它是在TControl里这样定义的 property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored; 其中 TNotifyEvent 是这样定义的 TNotifyEvent = procedure(Sender: TObject) of object; 你在生成这个事件的时候,可以看到它会有一个OnxxxxClick,它的定义就是 procedure OnxxxxClick(Sender: TObject) ; 然后就这个事件就是跟那个OnClick关联起来的。只不过这里的是过程,而你提到的是函数。但其实是一样的。
----------==
源代码 procedure TfrmMain.SendCompass(Value : Double); var ds:TCopyDataStruct; hd:THandle; ************************* 1 S: string; begin S := FloatToStr(Value); ds.cbData:=length(S)+1; GetMem(ds.lpData,ds.cbData); StrCopy(ds.lpData,PChar(S)); hd:=FindWindow(nil,'Compass'); *********************************2 if hd<>0 then*********************************3 SendMessage(hd,WM_COPYDATA,frmMain.Handle,Cardinal(@ds)); FreeMem(ds.lpData); 该程序中1处 THandle 是什么类型 3处 为什么可以对他进行是否为0的条件判断?
如果是判定FindWindow(nil,'Compass')>0 又是什么意思? findwindow()是起什么功能的 ?
handle它就是个长整型,可以跟integer比较一下, FindWindow(nil,'Compass')>0 说明能找到这个窗口的句柄,找不到则返回空/0, FindWindow只是查找窗口,但是找到的窗口并不一定是当前窗口。 一个窗口有2个部分组成,1个是窗口的类名,一个是窗口的窗口名称。通常情况下,我们自己做的窗口类名和窗口名称都是知道的,因为是自己给它们加上去的。但对于模板窗口,我们一般是不知道它的类名的,但它的窗口名称是可以知道的,就是显示在标题栏中的标题,就是它的窗口名称。 当有2个窗口在桌面上时,一个窗口有个编辑框,而另一个没有编辑框。当我们想要用那个有编辑框的窗口时,必须先得到那个窗口的句柄,FindWindow就是帮助我们取得这个窗口句柄。 我们可以任意指定FindWindow中两个参数的其中一个,或同时2个都指定来找到那个带有编辑框的窗口,然后FindWindow就会返回这个窗口的句柄(hwnd)。 窗口类名好比人的小名,窗口标题名称好比是人的大名。 我们一般知道一个人的大名,但不太清楚他的小名如对话框的类名#32776。FindWindow给了我们两个参数,以便我们在不知道一个人小名的情况下,可以通过大名来找到该人。