// Program methods public void BuildProgram(Device[] deviceList, string options, ProgramNotify callback, object userData) { var dev = Device.ToIntPtr(deviceList); var pfn = (ProgramNotifyData)null; var pcb = (ProgramNotifyInternal)null; var ptr = IntPtr.Zero; if (callback != null) { pfn = new ProgramNotifyData(callback, userData); pcb = ProgramNotifyData.Callback; ptr = GCHandle.ToIntPtr(pfn.Handle); } var err = NativeMethods.clBuildProgram(this.handle, (uint)dev.Length, dev, options, pcb, ptr); if (err != ErrorCode.Success) { throw new OpenClException(err); } }