首先要讲清楚静态调用和动态调用的区别。 1 静态调用,在pas文件中直接指定DLL和定义调用函数,在程序开始运行时,就会自动寻找该DLL,并载入内存。 A 即是无论你用不用,都要载入到内存中。 B 如果程序运行时,找不到要载入的DLL,就会报错,无法运行。 C 通常应用在于系统功能关联密切,必须而且经常使用的DLL。2 动态调用,在程序段中使用LoadLibrary('mydll.dll')加载。 A 在程序开始运行时,不会自动加载,只有在使用时,再通过LoadLibrary加载。 B 因此即使没有该DLL,程序的其他功能还可以使用。只是要用到该DLL,发现没有才会报错。 C 通常应用于对系统功能关联不密切,使用频率低的DLL。当然也有节省内存,优化性能的特点。 D Freelibrary与LoadLibrary要成对使用,是为了保证调用的内存空间有效释放。 例子:varHandle:Thandle;addc:Taddc;beginHandle:=LoadLibrary('Testdll.dll');//加载dll @addc:=GetProcAddress(Handle,'Test'); //取Test函数入口地址,大小写敏感。
if @addc<>nil then begin edit1.Text:=IntToStr(addc(10));//参数传递,这里直接用10 end; Freelibrary(Handle);//从内存释放dllend;
1 静态调用,在pas文件中直接指定DLL和定义调用函数,在程序开始运行时,就会自动寻找该DLL,并载入内存。
A 即是无论你用不用,都要载入到内存中。
B 如果程序运行时,找不到要载入的DLL,就会报错,无法运行。
C 通常应用在于系统功能关联密切,必须而且经常使用的DLL。2 动态调用,在程序段中使用LoadLibrary('mydll.dll')加载。
A 在程序开始运行时,不会自动加载,只有在使用时,再通过LoadLibrary加载。
B 因此即使没有该DLL,程序的其他功能还可以使用。只是要用到该DLL,发现没有才会报错。
C 通常应用于对系统功能关联不密切,使用频率低的DLL。当然也有节省内存,优化性能的特点。
D Freelibrary与LoadLibrary要成对使用,是为了保证调用的内存空间有效释放。
例子:varHandle:Thandle;addc:Taddc;beginHandle:=LoadLibrary('Testdll.dll');//加载dll @addc:=GetProcAddress(Handle,'Test'); //取Test函数入口地址,大小写敏感。
if @addc<>nil then begin edit1.Text:=IntToStr(addc(10));//参数传递,这里直接用10 end; Freelibrary(Handle);//从内存释放dllend;