2

我在 c# 中导入了一个 c++ 本机 dll 方法。下面是 C++ 方法的外观

extern "C" declspec(dllexport) int __stdcall temp(char *value)
{
  value="hksdhfs";
  return 1;
}

这就是我在 c# 中导入的方式

[DllImport("check.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true, EntryPoint = "temp")]
    public static extern int temp(string value);

问题是我能够通过“value”char 指针将数据发送到 c++ dll,但是当我在 c# 中获取“value”char 指针时,该值没有被更改。任何人都可以帮忙。

4

1 回答 1

0

由于参数在这种情况下不起作用,所以我更改了 c++ dll 方法的返回类型,如下所示,并以书面格式获取字符串

extern "C" declspec(dllexport) char* __stdcall temp(char *value)
{
  value="hksdhfs";
  return value;
}

dll导入是这样的

[DllImport("check.dll", CallingConvention = CallingConvention.StdCall, ExactSpelling = true, EntryPoint = "temp")]
[return:MarshalAs(UnmanagedType.LPStr)]
public static extern string temp(string value);

做 strcpy() 也可以,但如果我使用类,这个指针字符值将被传递,它不会工作,所以我更喜欢上面的方式,并且有效......谢谢大家。

于 2012-06-12T17:42:45.653 回答