private void HandleGetSelection(Message m) { ComponentSelectorData[] items = GetSelection(); int count = items != null ? items.Length : 0; Marshal.WriteInt32(m.WParam, count); if (count > 0) { IntPtr ppItems = Marshal.AllocCoTaskMem(count * Marshal.SizeOf(typeof(IntPtr))); for (int i = 0; i < count; i++) { IntPtr pItem = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(VSCOMPONENTSELECTORDATA))); Marshal.WriteIntPtr(ppItems, i * IntPtr.Size, pItem); VSCOMPONENTSELECTORDATA data = new VSCOMPONENTSELECTORDATA() { dwSize = (uint)Marshal.SizeOf(typeof(VSCOMPONENTSELECTORDATA)), bstrFile = items[i].File, bstrTitle = items[i].Title, bstrProjRef = items[i].ProjectReference, guidTypeLibrary = items[i].TypeLibrary, lCustom = items[i].CustomInformation, type = items[i].ComponentType, // the following items are handled separately lcidTypeLibrary = 0, wFileBuildNumber = 0, wFileMajorVersion = 0, wFileMinorVersion = 0, wFileRevisionNumber = 0, wTypeLibraryMajorVersion = 0, wTypeLibraryMinorVersion = 0, }; if (items[i].TypeLibraryCulture != null) { data.lcidTypeLibrary = (uint)items[i].TypeLibraryCulture.LCID; } if (items[i].FileVersion != null) { data.wFileMajorVersion = (ushort)items[i].FileVersion.Major; data.wFileMinorVersion = (ushort)items[i].FileVersion.Minor; data.wFileBuildNumber = (ushort)items[i].FileVersion.Build; data.wFileRevisionNumber = (ushort)items[i].FileVersion.Revision; } if (items[i].TypeLibraryVersion != null) { data.wTypeLibraryMajorVersion = (ushort)items[i].TypeLibraryVersion.Major; data.wTypeLibraryMinorVersion = (ushort)items[i].TypeLibraryVersion.Minor; } Marshal.StructureToPtr(data, pItem, false); } Marshal.WriteIntPtr(m.LParam, ppItems); } }
protected override ReferenceNode CreateFileComponent(VSCOMPONENTSELECTORDATA selectorData, string wrapperTool = null) { if (File.Exists(selectorData.bstrFile)) { if (string.Equals(Path.GetExtension(selectorData.bstrFile), ".jar", StringComparison.OrdinalIgnoreCase)) { return(CreateJarReferenceNode(selectorData.bstrFile)); } else { throw new InvalidOperationException("Cannot add a file reference to a non-jar file."); } } return(base.CreateFileComponent(selectorData, wrapperTool)); }
protected override ReferenceNode CreateFileComponent(VSCOMPONENTSELECTORDATA selectorData, string wrapperTool = null) { if (File.Exists(selectorData.bstrFile)) { if (string.Equals(Path.GetExtension(selectorData.bstrFile), ".jar", StringComparison.OrdinalIgnoreCase)) { return CreateJarReferenceNode(selectorData.bstrFile); } else { throw new InvalidOperationException("Cannot add a file reference to a non-jar file."); } } return base.CreateFileComponent(selectorData, wrapperTool); }