Ich implementiere derzeit ein Browser-Helper-Objekt, das das Ziehen von E-Mails vom Outlook auf die Internet Explorer-Seite erlauben würde.Drag/Drop von Outlook zu Internet Explorer über BHO funktioniert nicht auf x32/86 Maschinen
Ich folge dem im folgenden Beitrag beschriebenen Ansatz: Implementing a Drag-and-Drop function from MS Outlook into our web application. Ich habe es funktioniert aber nur auf x64 Maschinen.
DropFiles df = new DropFiles();
string filename = @"D:\projects\hello.txt";
byte[] binaryData = Encoding.Unicode.GetBytes(filename);
binaryData = binaryData.Concat(new byte[] { 0, 0 }).ToArray();
IntPtr pointerToGlobalMemory = Marshal.AllocHGlobal(Marshal.SizeOf(df) + binaryData.Length);
df.Files = Marshal.SizeOf(df);
df.Wide = true;
Marshal.StructureToPtr(df, pointerToGlobalMemory, true);
IntPtr newPointer = new IntPtr(pointerToGlobalMemory.ToInt32() + Marshal.SizeOf(df));
Marshal.Copy(binaryData, 0, newPointer, binaryData.Length);
var descriptorFormat = new COMInterop.FORMATETC();
descriptorFormat.cfFormat = HdropDescriptorId; // 15
descriptorFormat.ptd = IntPtr.Zero;
descriptorFormat.dwAspect = COMInterop.DVASPECT.DVASPECT_CONTENT;
descriptorFormat.lindex = -1;
descriptorFormat.tymed = COMInterop.TYMED.TYMED_HGLOBAL;
var td = new COMInterop.STGMEDIUM();
td.unionmember = pointerToGlobalMemory;
td.tymed = COMInterop.TYMED.TYMED_HGLOBAL;
dataObject.SetData(ref descriptorFormat, ref td, true);
Auf der Ausführung des letzten ling von: Auf den x32/86 Maschinen im folgenden Code die Ausnahme ich erhalte (natürlich habe ich echte Dateinamen einfügen mit gefälschter einer der Einfachheit halben ersetzt) Mit diesem Code (der den falschen HDROP-Deskriptor setzt) bekomme ich folgende Ausnahme: "Ungültige FORMATETC-Struktur (Ausnahme von HRESULT: 0x80040064 (DV_E_FORMATETC))".
Hat jemand Probleme beschrieben oder eine Idee gehabt, was kann der Grund für dieses Problem sein?
Um genauer zu sein über Umgebung - ich habe dieses Problem auf Win7 32 Bit mit IE 10, aber ich bin mir ziemlich sicher, dass der Grund vor allem in dieser Maschine 32 Bit ist.
Ja, nach der Implementierung meiner eigenen DataObject und überschreiben Methoden GetData und QueryGetData es begann zu arbeiten. Vielen Dank! –