我在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#中使用它?
提前致谢
答案 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);