2014-04-02 3 views
5

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.

Antwort

1

Sie müssen Ihr eigenes IDataObject implementieren und es an das ursprüngliche IDropTarget.Drop übergeben, anstatt ein vorhandenes IDataObject aus Outlook zu übernehmen.

+0

Ja, nach der Implementierung meiner eigenen DataObject und überschreiben Methoden GetData und QueryGetData es begann zu arbeiten. Vielen Dank! –

Verwandte Themen