C# 通过BHO&x27;从outlook拖放到internet explorer;t在x32/86机器上工作

C# 通过BHO&x27;从outlook拖放到internet explorer;t在x32/86机器上工作,c#,internet-explorer,outlook,interop,bho,C#,Internet Explorer,Outlook,Interop,Bho,我目前正在实现一个浏览器助手对象,它允许将电子邮件从outlook拖到internet explorer的页面 我遵循以下帖子中描述的方法:。我已经让它工作,但仅在x64机器上。在x32/86机器上,我在下面的代码段中遇到了一个异常(显然,为了简单起见,我已将真实文件名插入替换为假文件名插入): DropFiles df=新的DropFiles(); 字符串文件名=@“D:\projects\hello.txt”; byte[]binaryData=Encoding.Unicode.GetByt

我目前正在实现一个浏览器助手对象,它允许将电子邮件从outlook拖到internet explorer的页面

我遵循以下帖子中描述的方法:。我已经让它工作,但仅在x64机器上。在x32/86机器上,我在下面的代码段中遇到了一个异常(显然,为了简单起见,我已将真实文件名插入替换为假文件名插入):

DropFiles df=新的DropFiles();
字符串文件名=@“D:\projects\hello.txt”;
byte[]binaryData=Encoding.Unicode.GetBytes(文件名);
binaryData=binaryData.Concat(新字节[]{0,0}).ToArray();
IntPtr pointerToGlobalMemory=Marshal.AllocHGlobal(Marshal.SizeOf(df)+binaryData.Length);
df.Files=Marshal.SizeOf(df);
df.Wide=true;
StructureToPtr(df,pointerToGlobalMemory,true);
IntPtr newPointer=newintptr(pointerToGlobalMemory.ToInt32()+Marshal.SizeOf(df));
Copy(binaryData,0,newPointer,binaryData.Length);
var descriptorFormat=new COMInterop.FORMATETC();
descriptorFormat.cfFormat=HdropDescriptorId;//15
descriptorFormat.ptd=IntPtr.Zero;
descriptorFormat.dwAspect=COMInterop.DVASPECT.DVASPECT\u内容;
descriptorFormat.lindex=-1;
descriptor format.tymed=COMInterop.tymed.tymed_HGLOBAL;
var td=新的COMInterop.STGMEDIUM();
td.unionmember=pointerToGlobalMemory;
td.tymed=COMInterop.tymed.tymed_HGLOBAL;
SetData(ref descriptorFormat,ref td,true);
在执行这段代码的最后一行时(实际上设置了伪HDROP描述符),我得到了以下异常: “无效的FORMATETC结构(来自HRESULT:0x80040064(DV_E_FORMATETC)的异常)”

是否有人遇到过所述问题,或者知道该问题的原因是什么


更具体地说,关于环境-我在使用IE 10的32位win7上遇到了这个问题,但我非常确定,原因尤其是在该机器上是32位。

您需要实现自己的IDataObject并将其传递给原始IDropTarget。删除而不是劫持Outlook中的现有IDataObject。

是,在实现了我自己的DataObject和重写方法GetData和QueryGetData之后,它开始工作。谢谢!