Вызвать функцию Cll dll из С++/CLI

У меня есть dll C#. Код ниже:

public class Calculate
{
    public static  int GetResult(int arg1, int arg2)
    {
        return arg1 + arg2;
    }

    public static  string GetResult(string arg1, string arg2)
    {
        return arg1 + " " + arg2;
    }

    public static   float GetResult(float arg1, float arg2)
    {
        return arg1 + arg2;
    }

    public Calculate()
    {
    }
}

Теперь я планирую называть эту DLL из C++ таким образом.

[DllImport("CalculationC.dll",EntryPoint="Calculate", CallingConvention=CallingConvention::ThisCall)]
extern void Calculate();

[DllImport("CalculationC.dll",EntryPoint="GetResult", CallingConvention=CallingConvention::ThisCall)]
extern int GetResult(int arg1, int arg2);

Вот функция, которая называется GetResult

private: System::Void CalculateResult(int arg1, int arg2)
{
    int rez=0;

    //Call C++ function from dll
    Calculate calculate=new Calculate();
    rez=GetResult(arg1,arg2);
}

Я получил ошибку: "Синтаксическая ошибка: идентификатор" Рассчитать ". Может кто-нибудь помочь мне с этой ужасной ошибкой?

Ответ 1

Вы должны использовать CLI CLI, иначе вы не могли бы вызвать DllImport. Если это так, вы можете просто ссылаться на С# dll.

В С++ CLI вы можете просто сделать следующее:

using namespace Your::Namespace::Here;

#using <YourDll.dll>

YourManagedClass^ pInstance = gcnew YourManagedClass();

где 'YourManagedClass' определен в проекте С# с сборкой сборки 'YourDll.dll'.

** РЕДАКТИРОВАТЬ ** Добавлен ваш пример.

Вот как ваш пример должен выглядеть в CLI (для ясности я предполагаю, что G etResult не является статической функцией, иначе вы просто вызываете Calculate:: GetResult (...)

private: System::Void CalculateResult(int arg1, int arg2)
{
    int rez=0;
    //Call C++ function from dll
    Calculate^ calculate= gcnew Calculate();
    rez=calculate->GetResult(arg1,arg2);   
}