我试图使用Mono中托管代码中的libgsasl库。我还有几个电话在工作,但这个特别的电话让我很舒服。我不断地收到一个异常,我“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”这显然不太好。我相信我的问题可能是双方向的Gsasl_session参数,但我不确定。
本机函数的定义如下:
GSASL_API int gsasl_client_start (Gsasl * ctx,const char *mech,Gsasl_session ** sctx);
我已经将托管外挂定义为:
ReliabilityContract(Consistency.WillNotCorruptState,DllImport("libgsasl-7.dll",CharSet = CharSet.Auto) )公共静态extern gsasl_client_start( GsaslContext上下文、字符串机制、ref GsaslSession会话);
GsaslContext和GsaslSession是从SafeHandle继承的类。
您可以在文档中看到使用此方法的情况。
发布于 2012-11-14 02:29:37
好吧,我不知道我刚才做了什么,但很明显我的问题是在其他地方发生的,就像发布问题时一样。
我使用一个名为gsasl_init的不同函数创建了gsasl_init(以前定义为这个函数)。
[DllImport("libgsasl-7.dll", CharSet = CharSet.Auto)] [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public static extern int gsasl\_init(ref GsaslContext context);
当我将该方法调用更改为out而不是ref时,随后对gsasl_client_start的调用开始正常工作。我不太清楚其中的区别是什么,除了我可能是双分配内存,然后为gsasl_client_start提供不正确的GsaslContext内存地址。不管怎么说,事情现在似乎在起作用。如果有人对此有任何见解,请留下另一个答案,我会记下来的。
https://stackoverflow.com/questions/13372074
复制相似问题