从C ++ / CLI调用C#dll函数
我有一个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() { } }
现在,我打算用这种方式从C++
调用这个dll。
[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); }
我收到错误:“语法错误:标识符’计算’”。 有人可以帮我解决这个可怕的错误吗?
您必须使用c ++ CLI,否则无法调用DllImport。 如果是这种情况,您可以只引用c#dll。
在c ++ CLI中,您可以执行以下操作:
using namespace Your::Namespace::Here; #using YourManagedClass^ pInstance = gcnew YourManagedClass();
其中’YourManagedClass’是在c#项目中使用输出程序集’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); }