QT ライブラリがあり、それを別のプロジェクトにインポートしたいと考えています。
これで、ライブラリを変更しても、他のプロジェクトを再コンパイルする必要がなくなり、QLibrary を使用するようになりました。
しかし... クラスをインポートできません。または、クラスをインポートできますが、そのメソッドにアクセスできません。
これは私が作った例です。
これはクラス宣言です:
class TESTDLL_LIBSHARED_EXPORT TestDLL_lib
{
public:
TestDLL_lib();
int a;
int b;
int c;
int getValues();
};
そしてこれは実装です:
#include "testdll_lib.h"
TestDLL_lib::TestDLL_lib()
{
a = 10;
b = 20;
c = 30;
}
int TestDLL_lib::getValues()
{
return a+b+c;
}
extern "C" TESTDLL_LIBSHARED_EXPORT TestDLL_lib* create_TestDLL_lib()
{
return new TestDLL_lib();
}
これはメインファイルですが、他のプロジェクトでは:
#include <testdll_lib.h>
#include <QDebug>
#include <QLibrary>
int main(int argc, char *argv[])
{
QLibrary library("TestDLL_lib");
if (library.load())
{
typedef TestDLL_lib* (*create_TestDLL_lib_fun)();
create_TestDLL_lib_fun create_TestDLL_lib = (create_TestDLL_lib_fun)library.resolve("create_TestDLL_lib");
if (create_TestDLL_lib)
{
TestDLL_lib *myClassInstance = create_TestDLL_lib();
if (myClassInstance)
{
//qDebug() << QString::number(myClassInstance->getValues());
qDebug() << QString::number(myClassInstance->a) + " " + QString::number(myClassInstance->b) + " " + QString::number(myClassInstance->c);
}
}
library.unload();
}
}
これで、オブジェクトのすべてのデータ値 ( a
、b
、 ) にアクセスできます(さらに、DLL でそれらを変更すると、再構築せずにプログラムでも変更されます) 。c
myClassInstance
myClassInstance->getValues()
main.obj:-1: error: LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall TestDLL_lib::getValues(void)" (__imp_?getValues@TestDLL_lib@@QAEHXZ)
どうすればこれを解決できますか? インポートされたクラスからメソッドを呼び出すことは可能ですか?
ありがとうございました..