C++ 如何为加载的QLibrary库指定工作目录?
问题是: 我有一个Qt应用程序,它动态加载一个库并执行该库中的一个函数(参见代码示例)C++ 如何为加载的QLibrary库指定工作目录?,c++,qt,dll,qlibrary,C++,Qt,Dll,Qlibrary,问题是: 我有一个Qt应用程序,它动态加载一个库并执行该库中的一个函数(参见代码示例) 。。。 QLibrary库(“d:/Libs/MyLib.dll”); 如果(!library.load()) qDebug()可能会使用QDir::setCurrent()函数吗?谢谢,它很管用。但是,如果我有几个dll(每个dll都有自己的Start()函数)并通过信号调用这些函数,例如,会怎么样呢。在这种情况下,我应该在每个Start()语句之前使用QDir()::setCurrent?setCurre
。。。
QLibrary库(“d:/Libs/MyLib.dll”);
如果(!library.load())
qDebug()可能会使用QDir::setCurrent()
函数吗?谢谢,它很管用。但是,如果我有几个dll(每个dll都有自己的Start()函数)并通过信号调用这些函数,例如,会怎么样呢。在这种情况下,我应该在每个Start()语句之前使用QDir()::setCurrent?setCurrent是如何工作的?当我设置cuurentDir,然后运行函数,然后另一个Start()方法将重写我的上一个Dir,第一个文件将保存在第二个Dir中时,会出现这种情况吗?您可以将DLL位置作为参数传递到Start中,并使用它来获取绝对文件路径,而不仅仅是example.txt
...
QLibrary library( "d:/Libs/MyLib.dll" );
if ( !library.load( ) )
qDebug( ) << library.errorString( );
if ( library.load( ) )
qDebug( ) << "library loaded";
typedef void ( *StartPrototype ) ( );
StartPrototype Start = ( StartPrototype ) library.resolve( "Start" );
if ( !Start )
{
qDebug() << "Start( ) failed!";
}
Start();
...
extern "C" __declspec( dllexport ) void Start( )
{
ofstream myfile( "example.txt" );
if ( myfile.is_open( ) )
{
myfile << "This is a line.\n";
myfile.close( );
}
}