DLLImport(C代码)C#试图读取或写入受保护的内存。这通常表示其他内存已损坏”;

DLLImport(C代码)C#试图读取或写入受保护的内存。这通常表示其他内存已损坏”;,c#,c,visual-studio-2010,dll,C#,C,Visual Studio 2010,Dll,这是我的DLL导入语句: [DllImport("KaracellLib.dll", EntryPoint = "karacell_bridge@8", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)] public static extern int karacell_bridge(int argumentCount, string[] argCon

这是我的DLL导入语句:

[DllImport("KaracellLib.dll", EntryPoint = "karacell_bridge@8", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, ExactSpelling = true)]
    public static extern int karacell_bridge(int argumentCount, string[] argContent);
本机C代码(转换为DLL)中的实际函数定义:

当我尝试在我的C#代码中多次调用DLL时,我得到了提到的错误

我已尝试以下方法来解决此错误

  • 通过进入工具->调试->常规,抑制模块加载时的JIT优化(仅管理)
  • 在C#dLL导入定义中添加了ref:
    公共静态外部int-karacell_桥(int-argumentCount,ref-string[]argContent)

  • 感谢您的帮助!谢谢

    问题是因为多个线程正在调用C程序中的karacell#u桥函数。因此,一旦我处理好它,异常就被修复了:)

    int
    不是函数定义。(提示:注意格式!)char**argContent-显示对该函数的本机C调用。声明不足以编写正确的代码。请查看当您尝试在C中访问
    argContent
    或从C#调用函数时是否出现问题?@AlvinWong:当我调用DLL时,异常是AccessViolationException…@AlexFarber:您需要karacell#u桥函数吗?它跨越100多条线。。
    int __stdcall karacell_bridge(int argumentCount, char ** argContent )