'ShowSUM':__ declspec(dllexport)不能应用于具有__clrcall调用约定的函数

时间:2017-12-27 12:48:35

标签: c# c++ clr unmanaged managed

我有一个带有以下代码的C#DLL:

namespace Csharplib`{
  public class Calculate
  {
      public static int Sum(String value1, String value2)
      {
          int res = int.Parse(value1) + int.Parse(value2);
          return res;
      }
  }
}`

我有一个CLI / CLR C ++应用程序,其中添加了我的C#DLL的引用。以下是我的CLI / CLR C ++应用程序的代码:

using namespace System;
using namespace System::Reflection;

namespace CplusManaged {
  public ref class DoWork
  {
    public:int DoSum(System::String ^value1, System::String ^value2)
    {
      return Csharplib::Calculate::Sum(value1, value2);
    }
  };
}

__declspec(dllexport) int ShowSUM(System::String ^value1, System::String ^value2)`{
  CplusManaged::DoWork work;
  return work.DoSum(value1,value2);
}`

当我构建应用程序时,出现以下错误:

'ShowSUM': __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention

我是C#开发人员,我没有任何C ++经验。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

使用wchar_t *作为参数类型,并使用gcnew String()转换为String ^,如下所示:

__declspec(dllexport) int ShowSUM(wchar_t * inValue1, wchar_t * inValue2)
    {
        String ^ value1 = gcnew String(inValue1);
        String ^ value2 = gcnew String(inValue2);

        CplusManaged::DoWork work;
        return work.DoSum(value1, value2);
    }