Я создал пример проекта из пакета 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();
}