На стороне C ++ вы должны вывести функцию addMyNum
из класса myClass
. Это должно исправить вашу функцию возврата 0
проблемы.
Другая причина, которая может вызвать эту проблему, - это количество параметров, не совпадающее между функциями C ++ и C #. Например, когда у вас есть это на стороне C ++:
DLLExport int add(int num1, int num2){ return ...}
но это на стороне C #:
[DllImport("FirstDLL")]
public static extern int add(int num1);
Вы получите неопределенное поведение с этим. Результат будет случайным, потому что функция на стороне C # имеет один параметр, а функция на C ++ - два.
Не связано, но использование EntryPoint = "?addMyNum@myClass@@AEAAMPEAM@Z"
действительно выглядит странно. Иногда это необходимо, но иногда это не так, как вам нужно будет найти имя функции и сопоставить его с тем, что вам нужно для вызова на стороне C #. Вы можете просто поместить свою функцию C ++ в extern "C"
, и она будет гарантировать, что компилятор не изменит имя функции.
extern "C"
{
__declspec(dllexport) float addMyNum(float a)
{
return(a);
}
}
Тогда ваша сторона C #:
[DllImport("Trial")]
public static extern float addMyNum(float a);