Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QLibrary类加载共享库在运行时。More...
继承QObject。
该QLibrary类加载共享库在运行时。
一个QLibrary对象的一个实例在一个单一的共享对象文件操作(我们称之为“库” ,但也被称为一个“ DLL” ) 。一个QLibrary提供了一个平台无关的方式访问存储库中的功能。你可以传递一个文件名在构造函数中,或显式设置setFileName( ) 。当加载库时, QLibrary中的所有系统特定的库位置搜索(例如:LD_LIBRARY_PATH在Unix上) ,除非文件名有一个绝对路径。如果文件无法找到, QLibrary试着修改名字用不同平台特定的文件后缀,如“ 。所以”在Unix上, “ dylib的”在Mac上,或在Windows和Symbian 。“ DLL” 。这使得它可以指定只能由他们的基本名(即没有自己的后缀)标识的共享库,所以同样的代码将工作在不同的操作系统。
最重要的功能是load( )动态加载的库文件,isLoaded()来检查装载是否成功,并resolve( )来解决在库中的元件。该resolve( )函数隐式地试图加载库,如果它没有被加载。 QLibrary的多个实例可以用来访问同一个物理磁带库。一旦加载,图书馆保留在内存中,直到应用程序终止。您可以尝试使用卸载库unload( ) ,但如果其他的实例都使用相同的库,则调用将失败,并卸载当每一个实例都调用才会发生unload( ) 。
一个典型的应用QLibrary是解决一个库导出的符号,来调用C函数这个符号表示。这就是所谓的相对于“隐式链接” ,这是由在构建过程中的链接步骤对链接库中的可执行文件时进行“显式链接” 。
注:在Symbian解决使用他们的名字符号仅支持如果库被构建为STDDLL 。否则序必须被使用。另外,在塞班库的路径被忽略,系统默认的库位置始终使用。
下面的代码片段加载一个库,解决了符号“ mysymbol ” ,并调用该函数,如果一切成功。如果出现问题,例如库文件不存在或者符号没有定义,函数指针将是0 ,不会被调用。
QLibrary myLib("mylib"); typedef void (*MyPrototype)(); MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol"); if (myFunction) myFunction();
该符号必须导出为一个C函数的库resolve( )工作。这意味着函数必须被包裹在一个extern "C"如果阻塞的库编译一个C + +编译器。在Windows上,这也需要使用一个dllexport宏;见resolve( )对于如何做到这一点的细节。为方便起见,有一个静态的resolve( )函数,你可以使用,如果你只是想调用的库函数而不明确的加载库:
typedef void (*MyPrototype)(); MyPrototype myFunction = (MyPrototype) QLibrary.resolve("mylib", "mysymbol"); if (myFunction) myFunction();
该枚举描述了可被用来改变库被加载时的处理方式的可能的提示。这些值表示当加载库如何符号解析,并使用指定的setLoadHints()函数。
Constant | Value | Description |
---|---|---|
QLibrary.ResolveAllSymbolsHint | 0x01 | 原因在一个库中的所有符号加载时得到解决,而不是简单地当resolve()被调用。 |
QLibrary.ExportExternalSymbolsHint | 0x02 | 出口未解决的外部符号库中,使他们能够在其他以后加载动态加载的库来解决。 |
QLibrary.LoadArchiveMemberHint | 0x04 | 允许内的存档文件中指定一个特定的目标文件库的文件名。如果这个提示,给出库的文件名包含一个路径,这是一个参考的存档文件,其次是参照归档成员。 |
该LoadHints类型是一个typedef为QFlags\u003cLoadHint\u003e 。它存储载入提示值的或组合。
See also loadHints。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个库与给定parent。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个库对象与给定parent可以加载指定的库fileName。
我们建议省略了文件的后缀fileName,因为QLibrary会自动寻找与相应的后缀的文件按照平台,如在Windows “ 。所以”在Unix上, “ 。 dylib的”在Mac OS X ,和“ DLL” 。 (见fileName。 )
注:在Symbian的路径部分fileName被忽略。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个库对象与给定parent可以加载指定的库fileName和主版本号verNum。目前,版本号会被忽略在Windows和Symbian 。
我们建议省略了文件的后缀fileName,因为QLibrary会自动寻找与相应的后缀的文件按照平台,如在Windows “ 。所以”在Unix上, “ 。 dylib的”在Mac OS X ,和“ DLL” 。 (见fileName。 )
注:在Symbian的路径部分fileName被忽略。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个库对象与给定parent可以加载指定的库fileName和完整的版本号version。目前,版本号会被忽略在Windows和Symbian 。
我们建议省略了文件的后缀fileName,因为QLibrary会自动寻找与相应的后缀的文件按照平台,如在Windows “ 。所以”在Unix上, “ 。 dylib的”在Mac OS X ,和“ DLL” 。 (见fileName。 )
注:在Symbian的路径部分fileName被忽略。
返回与上次发生错误的描述文本字符串。目前, errorString只会被设置,如果load( )unload()或resolve( )由于某种原因失败。
这个函数中引入了Qt 4.2中。
返回True如果fileName有一个可加载的库的有效后缀,否则返回False 。
Platform | Valid suffixes |
---|---|
Windows | .dll, .DLL |
Unix/Linux | .so |
AIX | .a |
HP-UX | .sl, .so (HP-UXi) |
Mac OS X | .dylib, .bundle, .so |
Symbian | .dll |
在Unix尾随版本号将被忽略。
返回True如果库被加载,否则返回False 。
See also load( ) 。
加载库,如果已成功加载的库返回True,否则返回False 。自resolve( )解决,没有必要显式调用它的任何符号前总是调用这个函数。在某些情况下,您可能想预先加载的库,你会在这种情况下使用此功能。
See also unload( ) 。
返回导出符号的地址symbol。如有必要,该库被加载。该函数返回0,如果符号无法解析,或者无法加载库。
例如:
typedef int (*AvgFunction)(int, int); AvgFunction avg = (AvgFunction) library->resolve("avg"); if (avg) return avg(5, 8); else return -1;
该符号必须导出为从库中的C函数。这意味着函数必须被包裹在一个extern "C"如果库是编译一个C + +编译器。在Windows上,还必须明确地从使用的DLL导出函数__declspec(dllexport)编译器指令,例如:
extern "C" MY_EXPORT int avg(int a, int b) { return (a + b) / 2; }
同MY_EXPORT定义为
#ifdef Q_WS_WIN #define MY_EXPORT __declspec(dllexport) #else #define MY_EXPORT #endif
注:在Symbian解决与符号名只有当加载的库是作为STDDLL 。否则,该序数必须被使用。
这是一个重载函数。
加载库fileName并返回导出符号的地址symbol。需要注意的是fileName不应该包括特定于平台的文件后缀(见fileName) 。该库仍然加载,直到应用程序退出。
该函数返回0,如果符号无法解析,或者无法加载库。
注:在Symbian解决与符号名只有当加载的库是作为STDDLL 。否则,该序数必须被使用。
See also resolve( ) 。
这是一个重载函数。
加载库fileName与主版本号verNum并返回导出符号的地址symbol。需要注意的是fileName不应该包括特定于平台的文件后缀(见fileName) 。该库仍然加载,直到应用程序退出。verNum被忽略的Windows 。
该函数返回0,如果符号无法解析,或者无法加载库。
注:在Symbian解决与符号名只有当加载的库是作为STDDLL 。否则,该序数必须被使用。
See also resolve( ) 。
这是一个重载函数。
加载库fileName有完整的版本号version并返回导出符号的地址symbol。需要注意的是fileName不应该包括特定于平台的文件后缀(见fileName) 。该库仍然加载,直到应用程序退出。version被忽略的Windows 。
该函数返回0,如果符号无法解析,或者无法加载库。
注:在Symbian解决与符号名只有当加载的库是作为STDDLL 。否则,该序数必须被使用。
此功能被引入Qt的4.4 。
See also resolve( ) 。
设置fileName财产和主版本号fileName和versionNumber分别。该versionNumber被忽略的Windows和Symbian 。
注:在Symbian的路径部分fileName被忽略。
See also setFileName( ) 。
设置fileName财产和完整版本号为fileName和version分别。该version参数被忽略在Windows和Symbian 。
注:在Symbian的路径部分fileName被忽略。
此功能被引入Qt的4.4 。
See also setFileName( ) 。
卸载库,如果库可以卸载返回True,否则返回False 。
出现这种情况自动终止应用程序,所以你通常不应需要调用这个函数。
如果其它实例QLibrary使用相同的库,则调用将失败,并卸载只会发生在每一个实例都调用unload ( ) 。
请注意,在Mac OS X 10.3 ( Panther)的,动态库不能被卸载。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |