我很难导入和使用.NET 中的 COM 接口IWinInetHttpInfo
( http://msdn.microsoft.com/en-us/library/ms774972(v=vs.85).aspx )。
我正在编写 的实现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