c # — DllImport для csharp из cpp; строит, но застревает в функции cpp при запуске

Код создается без ошибок, но когда я его запускаю, он застревает в функции, которая вызывается из 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.

  1. заголовок:

    #define EXPORT extern "C" __declspec(dllexport)
    typedef intptr_t ItemListHandle;
    
  2. каст:

    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 в качестве другого проекта как часть этого решения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]