C#DllImport和Marshaling char **

时间:2013-05-31 12:15:04

标签: c# char dllimport

我在c#中工作,我需要在c ++ dll中使用这个函数:

extern "C" char   IMPEXP __stdcall service_GetParameter ( const char* parameter, const int value_lenght, char** value );

我在c ++代码中使用它如下:

char *val = new char[256];
service_GetParameter("firmware_version", 255, &val);
AnsiString FirmwareVersion = val;
delete[] val;

如何导入此功能并在c#中使用它?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果此函数分配内存并让调用者负责释放它,我恐怕你必须手动管理它:将参数声明为ref IntPtr并使用{{1}的方法} class获取带有指向数据副本的String。

然后调用相应的函数来释放内存(正如Dirk所说,如果没有关于函数的更多信息,我们就不能多说这些了。)

如果确实必须在调用之前分配它,它应该是这样的:

Marshal

答案 1 :(得分:0)

我会从这样的事情开始:

[DllImport("yourfile.dll", CharSet = CharSet.Ansi]
public static extern Int32 service_GetParameter([MarshalAs(UnmanagedType.LPStr)] String szParameter, Int32 value_length, [Out] StringBuilder sbValue);
相关问题