В настоящее время я пытаюсь интегрировать 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, и строка подключения не является мусором.
Вот представление на один уровень ниже стека вызовов из кода выше.
Однако, если я помещу код в DLL-оболочку C ++, которую я создал под названием AzureStorage.DLL, свяжу ее с Unreal и вызову оттуда, с тем же стеком вызовов строка станет мусором, когда она будет передана в wastorage.dll для разобрать.
Я думал, что это может быть связано с этой проблемой , но я все еще не понимаю, как это исправить, так как я не контролирую метод 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