我正在尝试使用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;
}
}
答案 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;
}
var
是c#
中的关键字,不能用作变量名称
答案 1 :(得分:0)
我怀疑你的问题是静态关键字:虽然方法不是完全动态的,但为静态方法赋值感觉......关闭。我确信还有其他人可以更详细地向您解释,但我会用以下之一替换您的代码:
public string str()
{
string _str = "hello";
return _str;
}
或
public static string str = "hello";
另请注意,如@Rajeev所述,您不应将var用作变量名,因为它是保留关键字。它可以作为变量名称,但这是非常糟糕的做法,因为它使您的代码难以阅读,例如
var var = "hello";
return var;
有效,但超级混乱。不要这样做。