0

我很难导入和使用.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

4

0 回答 0