This commit is contained in:
Steve Hawley 2023-02-08 12:02:06 -05:00 коммит произвёл GitHub
Родитель d8d17f20ab
Коммит 1a9e9be626
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 26 добавлений и 1 удалений

Просмотреть файл

@ -338,14 +338,27 @@ namespace AddressBook {
}
[DllImport (Constants.AddressBookLibrary)]
#if NET
extern unsafe static void ABAddressBookRegisterExternalChangeCallback (IntPtr addressBook,
delegate* unmanaged<IntPtr, IntPtr, IntPtr, void> callback, IntPtr context);
#else
extern static void ABAddressBookRegisterExternalChangeCallback (IntPtr addressBook, ABExternalChangeCallback callback, IntPtr context);
#endif
[DllImport (Constants.AddressBookLibrary)]
#if NET
extern unsafe static void ABAddressBookUnregisterExternalChangeCallback (IntPtr addressBook, delegate* unmanaged<IntPtr, IntPtr, IntPtr, void> callback, IntPtr context);
#else
extern static void ABAddressBookUnregisterExternalChangeCallback (IntPtr addressBook, ABExternalChangeCallback callback, IntPtr context);
#endif
#if !NET
delegate void ABExternalChangeCallback (IntPtr addressBook, IntPtr info, IntPtr context);
[MonoPInvokeCallback (typeof (ABExternalChangeCallback))]
#else
[UnmanagedCallersOnly]
#endif
static void ExternalChangeCallback (IntPtr addressBook, IntPtr info, IntPtr context)
{
GCHandle s = GCHandle.FromIntPtr (context);
@ -374,7 +387,13 @@ namespace AddressBook {
lock (eventLock) {
if (externalChange is null) {
sender = GCHandle.Alloc (this);
#if NET
unsafe {
ABAddressBookRegisterExternalChangeCallback (Handle, &ExternalChangeCallback, GCHandle.ToIntPtr (sender));
}
#else
ABAddressBookRegisterExternalChangeCallback (Handle, ExternalChangeCallback, GCHandle.ToIntPtr (sender));
#endif
}
externalChange += value;
}
@ -383,7 +402,13 @@ namespace AddressBook {
lock (eventLock) {
externalChange -= value;
if (externalChange is null) {
#if NET
unsafe {
ABAddressBookUnregisterExternalChangeCallback (Handle, &ExternalChangeCallback, GCHandle.ToIntPtr (sender));
}
#else
ABAddressBookUnregisterExternalChangeCallback (Handle, ExternalChangeCallback, GCHandle.ToIntPtr (sender));
#endif
sender.Free ();
}
}

Просмотреть файл

@ -41,7 +41,7 @@ namespace Cecil.Tests {
public string Reason;
}
[Ignore ("work in progress - there are 27 failures, mostly due to delegates")]
[Ignore ("work in progress - there are 25 failures, mostly due to delegates")]
[TestCaseSource (typeof (Helper), nameof (Helper.NetPlatformImplementationAssemblyDefinitions))]
public void CheckForNonBlittablePInvokes (AssemblyInfo info)
{