2014-04-02 10 views
5

Tôi hiện đang triển khai đối tượng trợ giúp trình duyệt cho phép kéo email từ triển vọng đến trang của trình khám phá internet.Kéo/thả từ giao diện vào trình duyệt internet qua BHO không hoạt động trên máy x32/86

Tôi đang theo cách tiếp cận được mô tả trong bài đăng sau: Implementing a Drag-and-Drop function from MS Outlook into our web application. Tôi đã có nó làm việc nhưng chỉ trên máy x64. Trên x32 86 máy/tôi nhận được ngoại trừ trong đoạn mã sau (rõ ràng là tôi đã thay thế tên tập tin thực chèn với một giả vì đơn giản):

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); 

Trên thực hiện các ling cuối cùng của mã này (thực sự thiết lập mô tả HDROP giả) Tôi nhận được ngoại lệ sau: "Cấu trúc FORMATETC không hợp lệ (Ngoại lệ từ HRESULT: 0x80040064 (DV_E_FORMATETC))".

Có ai đó đã từng mô tả sự cố hoặc có ý tưởng về nguyên nhân của vấn đề này không?

Để cụ thể hơn về môi trường - tôi gặp sự cố này trên win7 32 bit với IE 10 nhưng tôi khá chắc chắn rằng lý do đặc biệt trong máy đó là 32 bit.

Trả lời

1

Bạn cần triển khai IDataObject của riêng bạn và chuyển nó tới IDropTarget.Drop ban đầu thay vì chiếm đoạt IDataObject hiện tại đến từ Outlook.

+0

Có, sau khi triển khai DataObject của riêng tôi và các phương thức ghi đè GetData và QueryGetData nó bắt đầu hoạt động. Cảm ơn rất nhiều! –

Các vấn đề liên quan