Mono のマネージド コードから libgsasl ライブラリを使用しようとしています。他にもいくつかの通話が機能していますが、この特定の通話は私にぴったりです。「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが壊れていることを示しています。」という例外を受け取ります。これは明らかに良くありません。私の問題は二重間接化 Gsasl_session パラメータにあると思いますが、よくわかりません。
ネイティブ関数は次のように定義されます。
extern GSASL_API int gsasl_client_start (Gsasl * ctx, const char *mech, Gsasl_session ** sctx);
管理された extern を次のように定義しました。
[DllImport("libgsasl-7.dll", CharSet = CharSet.Auto)] [SuppressUnmanagedCodeSecurity] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public static extern int gsasl_client_start( GsaslContext context, string mechanism, ref GsaslSession session);
GsaslContext と GsaslSession は SafeHandle を継承したクラスです。
このメソッドの使用方法はドキュメントで確認できます。