0

我有一些已转换为 DLL 的 C 代码。我需要从 C# 程序调用 DLL。我收到错误“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。”

所以,我相信我没有正确转换我的函数原型,这会导致内存泄漏。

C中的函数原型是

int __stdcall karacell_bridge( int argumentCount, char **argContent)

这是 C# DLL 调用中函数原型的正确转换吗?

[DllImport("KaracellLib.dll", EntryPoint = "karacell_bridge@8", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)]
public static extern int karacell_bridge(int argumentCount, [In, Out]string[] argContent);
4

1 回答 1

0

不,您需要整理第二个参数。我不确定是否有一种安全的 PInvoke 方法来编组可修改的字符串数组;这里似乎会有很多失败模式。也许您可以尝试将字符串数组转换为char *.

于 2013-02-20T05:53:13.983 回答