示例#1
0
 /// <summary>
 /// Creates delegates and populates the managed version of the
 /// structure that will be passed to unmanaged callers.
 /// </summary>
 private void populateDelegates()
 {
     // if a delegate is re-located by a garbage collection, it will not affect
     // the underlaying managed callback, so Alloc is used to add a reference
     // to the delegate, allowing relocation of the delegate, but preventing
     // disposal. Using GCHandle without pinning reduces fragmentation potential
     // of the managed heap.
     {
         WSMPluginShellDelegate pluginShell = new WSMPluginShellDelegate(WSManPluginManagedEntryWrapper.WSManPluginShell);
         _pluginShellGCHandle = GCHandle.Alloc(pluginShell);
         // marshal the delegate to a unmanaged function pointer so that AppDomain reference is stored correctly.
         // Populate the outgoing structure so the caller has access to the entry points
         _unmanagedStruct.wsManPluginShellCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShell);
     }
     {
         WSMPluginReleaseShellContextDelegate pluginReleaseShellContext = new WSMPluginReleaseShellContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseShellContext);
         _pluginReleaseShellContextGCHandle = GCHandle.Alloc(pluginReleaseShellContext);
         _unmanagedStruct.wsManPluginReleaseShellContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseShellContext);
     }
     {
         WSMPluginCommandDelegate pluginCommand = new WSMPluginCommandDelegate(WSManPluginManagedEntryWrapper.WSManPluginCommand);
         _pluginCommandGCHandle = GCHandle.Alloc(pluginCommand);
         _unmanagedStruct.wsManPluginCommandCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginCommand);
     }
     {
         WSMPluginReleaseCommandContextDelegate pluginReleaseCommandContext = new WSMPluginReleaseCommandContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseCommandContext);
         _pluginReleaseCommandContextGCHandle = GCHandle.Alloc(pluginReleaseCommandContext);
         _unmanagedStruct.wsManPluginReleaseCommandContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseCommandContext);
     }
     {
         WSMPluginSendDelegate pluginSend = new WSMPluginSendDelegate(WSManPluginManagedEntryWrapper.WSManPluginSend);
         _pluginSendGCHandle = GCHandle.Alloc(pluginSend);
         _unmanagedStruct.wsManPluginSendCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSend);
     }
     {
         WSMPluginReceiveDelegate pluginReceive = new WSMPluginReceiveDelegate(WSManPluginManagedEntryWrapper.WSManPluginReceive);
         _pluginReceiveGCHandle = GCHandle.Alloc(pluginReceive);
         _unmanagedStruct.wsManPluginReceiveCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReceive);
     }
     {
         WSMPluginSignalDelegate pluginSignal = new WSMPluginSignalDelegate(WSManPluginManagedEntryWrapper.WSManPluginSignal);
         _pluginSignalGCHandle = GCHandle.Alloc(pluginSignal);
         _unmanagedStruct.wsManPluginSignalCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSignal);
     }
     {
         WSMPluginConnectDelegate pluginConnect = new WSMPluginConnectDelegate(WSManPluginManagedEntryWrapper.WSManPluginConnect);
         _pluginConnectGCHandle = GCHandle.Alloc(pluginConnect);
         _unmanagedStruct.wsManPluginConnectCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginConnect);
     }
     {
         WSMShutdownPluginDelegate shutdownPlugin = new WSMShutdownPluginDelegate(WSManPluginManagedEntryWrapper.ShutdownPlugin);
         _shutdownPluginGCHandle = GCHandle.Alloc(shutdownPlugin);
         _unmanagedStruct.wsManPluginShutdownPluginCallbackNative = Marshal.GetFunctionPointerForDelegate(shutdownPlugin);
     }
     if (!Platform.IsWindows)
     {
         WSMPluginOperationShutdownDelegate pluginShutDownDelegate = new WSMPluginOperationShutdownDelegate(WSManPluginManagedEntryWrapper.WSManPSShutdown);
         _WSMPluginOperationShutdownGCHandle = GCHandle.Alloc(pluginShutDownDelegate);
         _unmanagedStruct.wsManPluginShutdownCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShutDownDelegate);
     }
 }
示例#2
0
 /// <summary>
 /// Creates delegates and populates the managed version of the 
 /// structure that will be passed to unmanaged callers.
 /// </summary>
 private void populateDelegates()
 {
     // if a delegate is re-located by a garbage collection, it will not affect
     // the underlaying managed callback, so Alloc is used to add a reference
     // to the delegate, allowing relocation of the delegate, but preventing
     // disposal. Using GCHandle without pinning reduces fragmentation potential
     // of the managed heap.
     {
         WSMPluginShellDelegate pluginShell = new WSMPluginShellDelegate(WSManPluginManagedEntryWrapper.WSManPluginShell);
         _pluginShellGCHandle = GCHandle.Alloc(pluginShell);
         // marshal the delegate to a unmanaged function pointer so that AppDomain reference is stored correctly.
         // Populate the outgoing structure so the caller has access to the entry points
         _unmanagedStruct.wsManPluginShellCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShell);
     }
     {
         WSMPluginReleaseShellContextDelegate pluginReleaseShellContext = new WSMPluginReleaseShellContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseShellContext);
         _pluginReleaseShellContextGCHandle = GCHandle.Alloc(pluginReleaseShellContext);
         _unmanagedStruct.wsManPluginReleaseShellContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseShellContext);
     }
     {
         WSMPluginCommandDelegate pluginCommand = new WSMPluginCommandDelegate(WSManPluginManagedEntryWrapper.WSManPluginCommand);
         _pluginCommandGCHandle = GCHandle.Alloc(pluginCommand);
         _unmanagedStruct.wsManPluginCommandCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginCommand);
     }
     {
         WSMPluginReleaseCommandContextDelegate pluginReleaseCommandContext = new WSMPluginReleaseCommandContextDelegate(WSManPluginManagedEntryWrapper.WSManPluginReleaseCommandContext);
         _pluginReleaseCommandContextGCHandle = GCHandle.Alloc(pluginReleaseCommandContext);
         _unmanagedStruct.wsManPluginReleaseCommandContextCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReleaseCommandContext);
     }
     {
         WSMPluginSendDelegate pluginSend = new WSMPluginSendDelegate(WSManPluginManagedEntryWrapper.WSManPluginSend);
         _pluginSendGCHandle = GCHandle.Alloc(pluginSend);
         _unmanagedStruct.wsManPluginSendCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSend);
     }
     {
         WSMPluginReceiveDelegate pluginReceive = new WSMPluginReceiveDelegate(WSManPluginManagedEntryWrapper.WSManPluginReceive);
         _pluginReceiveGCHandle = GCHandle.Alloc(pluginReceive);
         _unmanagedStruct.wsManPluginReceiveCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginReceive);
     }
     {
         WSMPluginSignalDelegate pluginSignal = new WSMPluginSignalDelegate(WSManPluginManagedEntryWrapper.WSManPluginSignal);
         _pluginSignalGCHandle = GCHandle.Alloc(pluginSignal);
         _unmanagedStruct.wsManPluginSignalCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginSignal);
     }
     {
         WSMPluginConnectDelegate pluginConnect = new WSMPluginConnectDelegate(WSManPluginManagedEntryWrapper.WSManPluginConnect);
         _pluginConnectGCHandle = GCHandle.Alloc(pluginConnect);
         _unmanagedStruct.wsManPluginConnectCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginConnect);
     }
     {
         WSMShutdownPluginDelegate shutdownPlugin = new WSMShutdownPluginDelegate(WSManPluginManagedEntryWrapper.ShutdownPlugin);
         _shutdownPluginGCHandle = GCHandle.Alloc(shutdownPlugin);
         _unmanagedStruct.wsManPluginShutdownPluginCallbackNative = Marshal.GetFunctionPointerForDelegate(shutdownPlugin);
     }
     if (!Platform.IsWindows)
     {
         WSMPluginOperationShutdownDelegate pluginShutDownDelegate = new WSMPluginOperationShutdownDelegate(WSManPluginManagedEntryWrapper.WSManPSShutdown);
         _WSMPluginOperationShutdownGCHandle = GCHandle.Alloc(pluginShutDownDelegate);
         _unmanagedStruct.wsManPluginShutdownCallbackNative = Marshal.GetFunctionPointerForDelegate(pluginShutDownDelegate);
     }
 }