13,000
回編集
134行目: | 134行目: | ||
==== 動的ライブラリの明示的リンク ==== | ==== 動的ライブラリの明示的リンク ==== | ||
Qtには、動的ライブラリの関数を簡単に使用するために、QLibraryクラスが用意されている。<br> | Qtには、動的ライブラリの関数を簡単に使用するために、QLibraryクラスが用意されている。<br> | ||
<br> | |||
明示的リンクを使用して、動的ライブラリの関数を呼び出す手順は、以下の通りである。<br> | |||
# 動的ライブラリの関数において、C言語のグローバル関数として定義する。 | |||
# 動的ライブラリを生成する。 | |||
# 動的ライブラリを呼び出す側の実行ファイルと同じディレクトリに、動的ライブラリを配置する。 | |||
# QLibraryクラスを使用して、動的ライブラリの関数を呼び出す。 | |||
<br> | <br> | ||
以下の構成を持つ2つのプロジェクトを作成したとする。<br> | 以下の構成を持つ2つのプロジェクトを作成したとする。<br> | ||
* プロジェクト構成 | * プロジェクト構成 | ||
* | ** 動的ライブラリ | ||
*: Utils | **: Utils | ||
* 実行ファイル | ** 実行ファイル | ||
*: Moc | **: Moc | ||
<br> | <br> | ||
まず、Utilsプロジェクトにおいて、関数のみを定義したUtils.cppファイルを作成する。<br> | まず、Utilsプロジェクトにおいて、関数のみを定義したUtils.cppファイルを作成する。<br> | ||
<syntaxhighlight lang="c++"> | |||
// Utils_global.h | |||
#ifndef UTILS_GLOBAL_H | |||
#define UTILS_GLOBAL_H | |||
#include <QtCore/qglobal.h> | |||
#ifdef Q_OS_WIN // Windows | |||
#if defined(UTILS_LIBRARY) | |||
#define UTILS_EXPORT __declspec(dllexport) | |||
#else | |||
#define UTILS_EXPORT | |||
#endif | |||
#elif Q_OS_LINUX // Linux | |||
#if defined(UTILS_LIBRARY) | |||
#define UTILS_EXPORT Q_DECL_EXPORT | |||
#else | |||
#define UTILS_EXPORT Q_DECL_IMPORT | |||
#endif | |||
#endif | |||
#endif // LIBDIALOG_GLOBAL_H | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// Utils.cpp | // Utils.cpp | ||
149行目: | 180行目: | ||
#include <iostream> | #include <iostream> | ||
#ifdef Q_OS_WIN | //#ifdef Q_OS_WIN | ||
#define | // #define UTILS_EXPORT __declspec(dllexport) | ||
#else | //#else | ||
#define | // #define UTILS_EXPORT | ||
#endif | //#endif | ||
extern "C" | extern "C" UTILS_EXPORT void SampleHello(int count) | ||
{ | { | ||
while(--count) | while(--count) |