Вызов определенной функции класса из DLL-файла C ++ - PullRequest
0 голосов
/ 08 января 2020

Я создал пример проекта из пакета Amazon IoT Device SDK, который представляет собой проект PubSub Sample из папки примеров.

Мне пришлось вывести проект в виде файла DLL, чтобы образец можно было использовать в RAD studio, которую я смог успешно построить. Используя учебники по генерации DLL, я добавил строку __declspe c (dllexport) к определениям функций в классе.

Файл PubSub.hpp

#ifdef PUBSNUB_EXPORTS
#define PUBSNUB_API __declspec(dllexport)
#else
#define PUBSNUB_API __declspec(dllimport)
#endif

#include "mqtt/Client.hpp"
#include "NetworkConnection.hpp"


namespace awsiotsdk {
    namespace samples {
        class PubSub {
        protected:
            std::shared_ptr<NetworkConnection> p_network_connection_;
            std::shared_ptr<mqtt::ConnectPacket> p_connect_packet_;
            std::atomic_int cur_pending_messages_;
            std::atomic_int total_published_messages_;
            std::shared_ptr<MqttClient> p_iot_client_;

            __declspec(dllexport) ResponseCode RunPublish(int msg_count);
            __declspec(dllexport) ResponseCode SubscribeCallback(util::String topic_name,
                                           util::String payload,
                                           std::shared_ptr<mqtt::SubscriptionHandlerContextData> p_app_handler_data);
            __declspec(dllexport) ResponseCode DisconnectCallback(util::String topic_name,
                                            std::shared_ptr<DisconnectCallbackContextData> p_app_handler_data);
            __declspec(dllexport) ResponseCode ReconnectCallback(util::String client_id,
                                           std::shared_ptr<ReconnectCallbackContextData> p_app_handler_data,
                                           ResponseCode reconnect_result);
            __declspec(dllexport) ResponseCode ResubscribeCallback(util::String client_id,
                                             std::shared_ptr<ResubscribeCallbackContextData> p_app_handler_data,
                                             ResponseCode resubscribe_result);
            __declspec(dllexport) ResponseCode Subscribe();
            __declspec(dllexport) ResponseCode Unsubscribe();
            __declspec(dllexport) ResponseCode InitializeTLS();

        public:
            __declspec(dllexport) ResponseCode RunSample();
        };
    }
}

Я застрял на том, что не знаю, как вызывать RunSample () в примере консольного проекта в качестве примера, чтобы убедиться, что мой DLL-файл работает правильно. Я пытался вызвать функцию напрямую, но она говорит, что она не определена.

#include <iostream>
#include "PubSub.hpp"

int main()
{
    RunSample();
}
...