gpt4 book ai didi

c# - 通过 BHO 从 Outlook 拖放到 Internet Explorer 在 x32/86 机器上不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:45:48 24 4
gpt4 key购买 nike

我目前正在实现一个浏览器帮助对象,它允许将电子邮件从 Outlook 拖到 Internet Explorer 的页面。

我正在遵循以下帖子中描述的方法:Implementing a Drag-and-Drop function from MS Outlook into our web application .我让它工作但只在 x64 机器上。在 x32/86 机器上,我在以下代码段中遇到异常(显然,为了简单起见,我已经用伪造的文件名替换了真实的文件名插入):

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

在执行这段代码的最后一段时(实际上设置了假的 HDROP 描述符)我得到了以下异常:“无效的 FORMATETC 结构(HRESULT 异常:0x80040064 (DV_E_FORMATETC))”。

是否有人遇到过所描述的问题或知道此问题的原因是什么?

要更具体地说明环境 - 我在使用 IE 10 的 win7 32 位上遇到了这个问题,但我很确定特别是在那台机器上的原因是 32 位。

最佳答案

您需要实现自己的 IDataObject 并将其传递给原始 IDropTarget.Drop,而不是劫持来自 Outlook 的现有 IDataObject。

关于c# - 通过 BHO 从 Outlook 拖放到 Internet Explorer 在 x32/86 机器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22811035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com