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.
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! –