Вызов функции C # dll из C ++ / CLI - PullRequest
11 голосов
/ 27 января 2011

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

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 Ответ

21 голосов
/ 27 января 2011

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

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

using namespace Your::Namespace::Here;

#using <YourDll.dll>

YourManagedClass^ pInstance = gcnew YourManagedClass();

, где 'YourManagedClass' определен в проекте c # с выводомAssembly 'YourDll.dll'.

** EDIT ** Добавил ваш пример.

Вот как ваш пример должен выглядеть в 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);   
}
...