Код создается без ошибок, но когда я его запускаю, он застревает в функции, которая вызывается из DllImport в csharp. Я отслеживал это с помощью Debug.WriteLine (), чтобы подтвердить, где код застревает.
Строка DllImport в проекте csharp:
[DllImport("GettingData.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static unsafe extern bool GenerateItems(out ItemsSafeHandle itemsHandle,
out double* items, out int itemCount);
[DllImport("GettingData.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static unsafe extern bool ReleaseItems(IntPtr itemsHandle);
Код dllexport из проекта cpp выглядит следующим образом. Обратите внимание, что коды используют заголовочный файл и cpp из-за ошибки сборки, когда функции, определяемые в проекте cpp, были «уже» определены в App.xaml.h. Таким образом, чтобы исправить это, класс определен в заголовочном файле, а определения функции-члена находятся в файле cpp.
заголовок:
#define EXPORT extern "C" __declspec(dllexport)
typedef intptr_t ItemListHandle;
каст:
EXPORT bool GenerateItems(ItemListHandle* hItems, double** itemsFound, int* itemCount)
{
auto items = new std::vector<double>();
for (int i = 0; i < 500; i++)
{
items->push_back((double)i);
}
*hItems = reinterpret_cast<ItemListHandle>(items);
*itemsFound = items->data();
*itemCount = items->size();
return true;
}
EXPORT bool ReleaseItems(ItemListHandle hItems)
{
auto items = reinterpret_cast<std::vector<double>*>(hItems);
delete items;
return true;
}
Я слежу за самым популярным ответом на этот пост Вот чтобы получить минимально необходимый код, работающий. Поскольку я выполняю это в решении UWP и не могу использовать оболочку C ++ / CLI в качестве другого проекта как часть этого решения.
Задача ещё не решена.
Других решений пока нет …