Вызов функций DLL из пространства имен в RAD Studio - PullRequest
0 голосов
/ 09 января 2020

Я новичок в использовании RAD Studio, так как в настоящее время я должен использовать его для этого текущего проекта. Я пытаюсь вызвать функции, определенные в DLL-файле, который я сгенерировал в Visual Studio в проекте RAD Studio C ++.

Следуя совету из этого вопроса ниже Использование Visual Studio DLL в Embarcadero RAD Studio XE? Я преобразовал созданный мной файл C ++ DLL из Visual Studio в поддерживаемый файл для RAD Studio с помощью их команда:

mkexp pub-sub-sample.a pub-sub-sample.dll

Я могу проверить, что мои функции были экспортированы, как я сделал команду dump.

Turbo Dump  Version 6.5.4.0 Copyright (c) 1988-2016 Embarcadero Technologies, Inc.
                Display of File pub-sub-sample.dll

EXPORT ord:0001='?DisconnectCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VDisconnectCallbackContextData@awsiotsdk@@@6@@Z'
EXPORT ord:0002='?GetCurrentPath@ConfigCommon@awsiotsdk@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ'
EXPORT ord:0003='?InitializeCommon@ConfigCommon@awsiotsdk@@SA?AW4ResponseCode@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z'
EXPORT ord:0004='?InitializeTLS@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0005='?LogParseError@ConfigCommon@awsiotsdk@@KAXAEBW4ResponseCode@2@AEBV?$GenericDocument@U?$UTF8@D@rapidjson@@V?$MemoryPoolAllocator@VCrtAllocator@rapidjson@@@2@VCrtAllocator@2@@rapidjson@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z'
EXPORT ord:0006='?ReconnectCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VReconnectCallbackContextData@awsiotsdk@@@6@W443@@Z'
EXPORT ord:0007='?ResubscribeCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VResubscribeCallbackContextData@awsiotsdk@@@6@W443@@Z'
EXPORT ord:0008='?RunPublish@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@H@Z'
EXPORT ord:0009='?RunSample@PubSub@samples@awsiotsdk@@QEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0010='?Subscribe@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0011='?SubscribeCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0V?$shared_ptr@VSubscriptionHandlerContextData@mqtt@awsiotsdk@@@6@@Z'
EXPORT ord:0012='?Unsubscribe@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'

А также, что он собирается и запускается в рамках проекта Visual Studio, в котором я могу вызвать функцию RunSample () из сгенерированного файла DLL.

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

int main()
{
    awsiotsdk::samples::PubSub object1;
    object1.RunSample();
}

Мой вопрос: как можно Я портировать приведенный выше пример кода для запуска в проекте RAD studio C ++? Я пытался использовать extern "C" __declspe c (dllimport) перед объектом awsiotsdk :: samples :: PubSub object1, но он не работал.

...