我为API实现了一个非常简单的自定义封送拆封器:
自定义封送拆集器:
private sealed class JuliaWrapperMarshaller : ICustomMarshaler
{
object ICustomMarshaler.MarshalNativeToManaged(IntPtr pNativeData) => (JuliaWrapper)pNativeData;
[other methods removed]
}
API:
[DllImport(@"libjulia.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JuliaWrapperMarshaller))]
public static extern JuliaWrapper jl_eval_string(string str);
并且当jl_eval_string
方法返回非零的IntPtr时,此方法工作正常。我可以将其转换为返回对象JuliaWrapper
,一切都很好。
当我使用无效参数执行jl_eval_string
并且返回零IntPtr时,就会出现问题。
我想在我的JuliaWrapper
对象中处理此问题,并自动调用“获取上一个错误”。但是,我没有机会,因为当ICustomMarshaler.MarshalNativeToManaged
方法返回jl_eval_string
0x0000
方法