Yerel bir C kitaplığım var ve onunla bazı F # kodlaması yapmak istiyorum. şey istisna olsun:F # Delege türü alanına sahip Marshall yapıları
System.TypeLoadException: mareşal alan türü 'LoggingModel' arasında 'log' Can not: bu tip hiçbir dizme desteği yoktur. System.StubHelpers.ValueClassMarshaler.ConvertToNative de
(IntPtr DST, ıntptr src, ıntptr pMT, CleanupWorkList & pCleanupWorkList) FSI_0009.Initialize (ComponentOverrideFlags bayrakları olarak
, LoggingModel & loggingModel, ThreadingModel & ThreadingModel'ı, SchedulingModel & schedulingModel, ıntptr memoryModel) de
$ FSI_0011.main @() D içinde:. \ dev_p \ f \ # FunBindings \ FunExample Environment.fs \: satır 16nedeniyle durduruldu Ben interaktif işlevi yürütmek "başlatmak" çalıştığınızdamodule Interop [<CLSCompliant(true); Flags>] type LogTarget = | None = 0 | Console = 1 | Trace = 2 | Custom = 4 [<UnmanagedFunctionPointer(CallingConvention.Cdecl)>] type LogCallback = delegate of LogTarget * string * string * nativeint -> unit [<UnmanagedFunctionPointer(CallingConvention.Cdecl)>] type ReleaseCallback = delegate of nativeint -> unit [<Struct>] type LoggingModel = val mutable targets : LogTarget val mutable log : LogCallback val mutable deleteModel : ReleaseCallback val mutable userparam : IntPtr [<DllImport("CLIBRARY.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "txInitialize")>] [<MethodImpl(MethodImplOptions.ForwardRef)>] extern int Initialize(ComponentOverrideFlags flags, LoggingModel& loggingModel, ThreadingModel& threadingModel, SchedulingModel& schedulingModel, IntPtr memoryModel) module Environment let initialize = let mutable loggingModel = new LoggingModel() let mutable threadingModel = new ThreadingModel() let mutable schedulingModel = new SchedulingModel() Initialize(ComponentOverrideFlags.None, &loggingModel, &threadingModel, &schedulingModel, IntPtr.Zero)
Temelde, yukarıda belirtilen hata alıyorum:İşte kodu
hata.
Gerçekten herhangi bir yardım için minnettar olurum.
Güncelleme: Kodu biraz daha kontrol ettim ve etkileşimli konsolun dışında, istisnalarla karşılaşmadan çalıştığı görülüyor. Emin olmak için CLibrary için biraz daha fazla bilgi vermem gerekiyor. Bu arada, bu istisnaya neyin yol açabileceğini bilen ve nasıl önlenebileceğini bilen varsa, cevabı gerçekten takdir ediyorum.
Üzgünüz, Tim, yardımcı olmadı. Tam istisna bilgisi ile soru düzenleyeceğim. – PompolutZ