c#方法没有将字符串返回给python

时间:2015-05-29 08:48:05

标签: c# python

我正在尝试使用ctypes模块从python调用c#代码。问题是c#方法正确返回整数值但不对字符串这样做。它返回不同的数字而不是字符串。每次运行时,数字也会有所不同。任何人都可以告诉这个代码有什么问题。我的python代码如下:

Python代码:

import ctypes
a = ctypes.cdll.LoadLibrary(r"C:\path\ConsoleApplication1.dll")
print a.mul(10,4)
print a.add(10,4)
print a.str()

C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using RGiesecke.DllExport;


class Test
   {
   [DllExport("TestExport", CallingConvention = CallingConvention.Cdecl)]
   public static int add(int left, int right)
      {
        return left + right;
      }
   [DllExport("mul", CallingConvention = CallingConvention.Cdecl)]
   public static int mul(int left, int right)
      {
        return left * right;
      }
   [DllExport("str", CallingConvention = CallingConvention.Cdecl)]
   public static String str()
     {
       String var = "hello";
       return var;

      }

   }

2 个答案:

答案 0 :(得分:0)

更改以下代码

 [DllExport("str", CallingConvention = CallingConvention.Cdecl)]
  public static String str()
 {
   String var = "hello";
   return var;

  }

 [DllExport("str", CallingConvention = CallingConvention.Cdecl)]
public static String str()
 {
   String str= "hello";
   return str;

  }

varc#中的关键字,不能用作变量名称

答案 1 :(得分:0)

我怀疑你的问题是静态关键字:虽然方法不是完全动态的,但为静态方法赋值感觉......关闭。我确信还有其他人可以更详细地向您解释,但我会用以下之一替换您的代码:

public string str()
 {
   string _str = "hello";
   return _str;
  }

public static string str = "hello";

另请注意,如@Rajeev所述,您不应将var用作变量名,因为它是保留关键字。它可以作为变量名称,但这是非常糟糕的做法,因为它使您的代码难以阅读,例如

var var = "hello";
return var;

有效,但超级混乱。不要这样做。