我很难导入并使用IWinInetHttpInfo
(http://msdn.microsoft.com/en-us/library/ms774972(v=vs.85).aspx),即.NET中的COM接口。
我正在编写IDownloadManager
的实现,最终导致我实现了这个接口来获取一些原始头文件。
此接口只有一个方法QueryInfo(参见上面的链接)。在.NET中编写签名似乎是错误的,因为我在调用时总是得到HRESULT 0x80070057(参数不正确)。
这是我到目前为止所拥有的:
[ComImport, ComVisible(true)]
[Guid("79eac9d8-bafa-11ce-8c82-00aa004ba90b")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[CLSCompliant(false)]
public interface IWinInetHttpInfo
{
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int QueryInfo(
[In, MarshalAs(UnmanagedType.U4)] UInt32 dwOption,
IntPtr pBuffer,
[In, Out, MarshalAs(UnmanagedType.U4)] ref UInt32 pcbBuf,
[In, Out, MarshalAs(UnmanagedType.U4)] ref UInt32 pdwFlags,
[In, Out, MarshalAs(UnmanagedType.U4)] ref UInt32 pdwReserved);
}
我有一种感觉,我上面的签名是错误的,但我不知道如何解决它。任何指导都将不胜感激。
编辑:以下是示例用法:
IWinInetHttpInfo spWinInetHttpInfo = (IWinInetHttpInfo)m_pBinding; //this cast causes queryinterface to be called
if (spWinInetHttpInfo != null)
{
uint size = 0; //sizeof(DWORD)
uint flags = 0;
//Get all headers
uint ignore = 0;
int hrTemp = spWinInetHttpInfo.QueryInfo(Constants.HTTP_QUERY_RAW_HEADERS_CRLF,
IntPtr.Zero, ref size, ref flags, ref ignore);
//we get here, but hrTemp == 0x80070057
}
添加信息:
我正在尝试在此处移植使用C ++编写的OnProgress方法: http://code.google.com/p/webknowledge/source/browse/trunk/csExWB/ComUtilities/ComUtilities/UtilMan.cpp?r=7