如何在C ++(.so)和C#之间传递字符串

时间:2019-03-28 01:56:10

标签: c# c++ pinvoke .so

我想在Linux上的C ++(.so)和C#之间来回传递字符串。但是,我真的找不到在Linux上使用PInvoke的示例(PInvoke的大多数搜索结果在Windows上)。因此,在Linux上执行此操作的最佳方法是什么?

我已经尝试过普通的char *解决方案,但是它不起作用。我也不知道这种方法是否安全,因为它在非托管代码和托管代码之间进行编组。

C ++

//NativeSO

extern "C" const char* IO_String(const char *message)
{
  // I know it is "const char*", but I just want 
  // to express what I want to achieve with this function 
  message = "I changed a C# string"; 
  return message;
}

C#

[DllImport("NativeSO")] //let's assume the file name & path are correct
static extern string IO_String(string message);

...

public void test()
{
  string target = IO_String("hi");
  bool isTrue = (target == "I changed a C# string"); 
  print(isTrue); //expect to be true
}

我期望print(isTrue)在C#中是正确的,但是它不起作用。上面的代码的主要目的是演示我正在尝试实现的目标。

0 个答案:

没有答案