dll(1)
来源:互联网 发布:js excel身份证号码 编辑:程序博客网 时间:2024/05/21 11:02
dll文件的介绍:
dll文件,拥有自己的数据段,但是没有自己的堆栈,使用应用程序的堆栈,在两个dll中不可以共享全局的变量。dll可以用来封装相应的功能,实现了和应用程序的物理上的分开。简单的dll导出函数,复杂dll在其中调用了其他dll,可以到处类等,还可以使用dll来封装相应的应用程序的资源。
exports function funName index indexnum name ''; index 来制定导出函数的序号,没有由编译器默认。 name 来指定导出函数的名字,没有则是原来的函数的名字。 在应用程序中这样来引用函数 ----------静态的方式。 function funone external 'dllname' name aliasname; -- 应用的时候也可以使用函数的别名来进行引用。 ------静态链接全部被加载到内存中应用程序启动的时候 ------动态的加载只有在使用的时候才加载到内存中来,并且可以根据情况来选择合适dll。但是复杂。 ------------------------------------------------------------------------------------- 函数的引用的方式。 1.通过过程或者函数名 function funone:integer;stdcall; external 'dllname.dll' 2.通过过程或者函数的别名。 function funone:integer; external 'dllname.dll' name funnamealias 3.通过过程或者函数的索引。速度快,但是不是很直观。 function funname :integer;stdcall; external 'dllname.dll' index 5; 为了各种语言中的dll的兼容性在使用的时候,需要使用windows的stdcall delphi的register c/c++ cdecl dll中有自己的ds 但是没有ss ,在dll中可以使用自己的变量,但是调用它的模块不可以使用它定义的变量。 可以通过函数来进行传递操作。 为实现进程间的通信可以使用多种方法。
1.创建dll工程,添加一个单元,然后创建下面的代码
unit untdemo;
interface
function funOne:Integer;stdcall;---使用标准的方式导出,如果便于c++的调用使用pChar,shortString
避免使用和他不想兼容的类型。
implementation
function funOne: Integer; begin Result := 100; end;
2.在工程的文件中导出本函数。
exports funOne name 'one'; -- -----------------name 表示对函数的重新命名。
3.编译生成dll。
第二,创建一个新的应用程序进行相应的调用。
1.application。
函数的声明。
function one: Integer;external 'staticDll.dll';
-----------------external 表示该函数在那个dll中,这是静态的调用。
然后就可以使用该函数了。
注意:dll的调试:
在调试dll的时候,可以设置。run——parameter--load中设置相应的应用程序来进行dll的调试。
很久没有使用delphi的dll了,先写一篇,静态调用的方式,后面继续介绍相应的知识。!!!
下面说明一下dll的动态调用的方法和注意事项!!!、
1.编写相应的动态链接库。 例如导出:这样的函数 function funOne: integer;stdcall; exports funOne; 2.对该函数进行相应的动态调用。 a.声明相应的类型来对得到的函数指针进行相应的变换。 type TMyFun = function: integer; b.对dll进行相应的动态加载。 procedure TForm1.btn1Click(Sender: TObject); var hinstance: THandle; proc: TFarProc; iResult: Integer; begin hinstance := LoadLibrary('dllDynamic.dll');//加载模块,返回相应的句柄。 if hinstance = 0 then exit; proc := GetProcAddress(hinstance,PChar('funOne'));//得到函数的地址。 if proc <> nil then iResult := tmyfun(proc);//对函数地址进行相应的转换。 ShowMessage(IntToStr(iResult)); FreeLibrary(hinstance);// 释放相应的模块。 end;
- [DLL劫持] 1 DLL劫持之DLL基础(1)
- LabVIEW与DLL(1):关于DLL
- dll(1)
- Delphi Dll(1)
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL入门浅析(1)——如何建立DLL
- DLL调用(1):C++静态调用DLL
- 查看linux虚拟内存大小
- 不管她是否调皮、不管她成绩是否优秀、也不管她是否迷恋游戏,只想她能睁开眼睛。
- 读后感: 懈寄生---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十四)
- C++ 成长之路
- 查看windows端口号占用的程序
- dll(1)
- Java中的cookie管理方案(1)-与J2ME结合
- 体会朋友的意义!
- C++ 成长之路
- 设计模式趣解
- Java中的cookie管理方案(2)-与J2ME结合
- 在ASP.NET中实现ping
- 读后感:苹果之父乔布斯:我是如何东山再起的
- 安全过河问题