Как вернуть переменную int из функции в dll на C++ обратно в приложение на C#?
Имеется приложение на C#, которое должно передать в dll массив структур. Результат обработки массива функция dll должна возвратить в виде переменной int. Поиск показал, что направление работы - это использование технологии PInvoke (см. https://docs.microsoft.com/ru-ru/cpp/dotnet/calling-native-functions-from-managed-code?view=msvc-170). C этим я еще буду разбираться. Сейчас столкнулся с проблемой корректного написания кода самой dll. Все примеры, что мне удалось найти, предлагают такой синтаксис записи: return a, где a - некоторая переменная. Visual Studio же предлагает автоматически вариант кода, который пока что распознается компилятором как ошибочный. Поиск по коду ошибки (E0029 - "Требуется выражение") ничего толком не дал. Вопрос - как корректно задать последний оператор функции, возвращающий переменную?
Привожу код библиотеки. Точка входа:
// dllmain.cpp : Определяет точку входа для приложения DLL.
#include "pch.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Заголовочный файл:
#pragma once
#ifdef PACKINGDLL_EXPORTS
#define PACKINGDLL_API __declspec(dllexport)
#else
#define PACKINGTDLL_API __declspec(dllimport)
#endif
typedef struct _PACKAGINGDATA
{
int Lx;
int Ly;
int Lz;
double dbl_Mass;
bool Up;
} PACKAGINGDATA;
extern "C" PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA * sPD_Packaging_data);
Определение функции:
PACKINGDLL_API int analysis(int int_Number, PACKAGINGDATA* sPD_Packaging_data)
{
return PACKINGDLL_API int();
}
Ответы (1 шт):
Протестировал библиотеку с записью:
return a;
Для версии библиотеки и приложения C# х86 работает, осталось добиться, чтобы работало и для х64.