在.NET中导入IWinInetHttpInfo(COM)的正确方法是什么?

时间:2013-04-26 17:22:55

标签: c# com com-interop

我很难导入并使用IWinInetHttpInfohttp://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

0 个答案:

没有答案