Переменные - это сборщик мусора в C ++ DLL - PullRequest
1 голос
/ 18 июня 2019

В настоящее время я пытаюсь интегрировать AzureStorageCPP в Unreal Engine 4, используя эту страницу документации . Что я делаю, так это создаю специальную оболочку C ++ DLL вокруг AzureStorageCPP, а затем Unreal Link эту DLL в Unreal Code.

Я установил AzureStorageCPP как библиотеки DLL через vcpkg. По завершении wastorage.dll является одной из важных библиотек DLL, которые необходимо связать.

Оболочка C ++ DLL, которую я написал для AzureStorageCPP, приведена ниже:

#include "was/storage_account.h"
#include "was/blob.h"

void UploadFileToAzure(char* FileName)
{
    azure::storage::cloud_storage_account storage_account = azure::storage::cloud_storage_account::parse(U("DefaultEndpointsProtocol=https;AccountName=test;AccountKey=test"));

}

Насколько я могу сказать, azure :: storage :: cloud_storage_account :: parse живет в wastorage.dll

Проблема в том, что когда этот код разбора выполняется как консоль C ++, он работает просто отлично. ConnectionString корректно передается по стеку вызовов в wastorage.dll, и строка подключения не является мусором.

Вот представление на один уровень ниже стека вызовов из кода выше.

image

Однако, если я помещу код в DLL-оболочку C ++, которую я создал под названием AzureStorage.DLL, свяжу ее с Unreal и вызову оттуда, с тем же стеком вызовов строка станет мусором, когда она будет передана в wastorage.dll для разобрать.

image image

Я думал, что это может быть связано с этой проблемой , но я все еще не понимаю, как это исправить, так как я не контролирую метод Parse из AzureStorage.

Вот как я создал заголовок оболочки C ++ DLL, источник уже показан выше:

AzureStorage.h

#pragma once

#define AZURESTORAGEDLL_API _declspec(dllexport)

#ifdef __cplusplus      //if C++ is used convert it to C to prevent C++'s name mangling of method names
extern "C"
{
#endif

    void AZURESTORAGEDLL_API UploadFileToAzure(char* FileName);

#ifdef __cplusplus
}
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...