Newer
Older
libj / modules / libj / include / j / lang / dl.hpp
/**
 * @file dl.hpp
 * @brief J Library DL ヘッダファイル。
 * @copyright  2001 - 2024  Nomura Kei
 * @depends
 *   j/lang/object.hpp
 */
#ifndef J_LANG_DL_HPP
#define J_LANG_DL_HPP

#include <memory>

#include <j/lang/object.hpp>

namespace j
{
    namespace lang
    {

#if (IS_WINDOWS)
        typedef HINSTANCE dl_handle_t;
        typedef FARPROC WINAPI dl_func_t;
#else
        typedef void *dl_handle_t;
        typedef void *dl_func_t;
#endif

        class Dl final : public Object
        {
        public:
            // コンストラクタ
            Dl(const String &fileName) noexcept;

            // コピーコンストラクタ
            Dl(const Dl &obj) noexcept;

            // ムーブコンストラクタ
            Dl(Dl &&obj) noexcept;

            // デストラクタ
            ~Dl() noexcept;

            // コピー代入演算子
            Dl &operator=(const Dl &obj) noexcept;

            // ムーブ代入演算子
            Dl &operator=(Dl &&obj) noexcept;

            // 文字列表現取得
            String toString() const noexcept;

            // 関数取得
            dl_func_t sym(const String &symbol);

        private:
            dl_handle_t handle;
        };

    } // namespace lang
} // namespace j

#endif // J_LANG_DL_HPP