Вызвать функцию 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);
}