如何在 C# 互操作中使用 InternetQueryOption?

Posted

技术标签:

【中文标题】如何在 C# 互操作中使用 InternetQueryOption?【英文标题】:How to use InternetQueryOption in C# interop? 【发布时间】:2012-04-10 12:05:57 【问题描述】:

在我的 C# 代码中,我想使用在 MSDN 中定义的 InternetQueryOption,例如:

BOOL InternetQueryOption(
  __in     HINTERNET hInternet,
  __in     DWORD dwOption,
  __out    LPVOID lpBuffer,
  __inout  LPDWORD lpdwBufferLength
);

在我写的 C# 代码中:

    [DllImport("wininet.dll", SetLastError = true)]
            static extern bool InternetQueryOption(
            IntPtr hInternet, 
            uint dwOption, 
            IntPtr lpBuffer, 
            ref int lpdwBufferLength);

我的 C++ 代码:

...
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST","/BM-Login/auth-cup", NULL, NULL, accept, secureFlags, 0);
    DWORD dwFlags;
    DWORD dwBuffLen = sizeof(dwFlags);

    InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS,
            (LPVOID)&dwFlags, &dwBuffLen);

    dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
      dwFlags |= SECURITY_FLAG_IGNORE_REVOCATION;
      dwFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
      dwFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_WRONG_USAGE;

    InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS,
                            &dwFlags, sizeof (dwFlags) );
...

如何在 C# 中编写相同的代码? 谢谢。 (对不起,我的英语很糟糕)

【问题讨论】:

是否正在使用 WebRequest,msdn.microsoft.com/en-us/library/system.net.webrequest.aspx,由于某种原因不是一个选项? Jamie See 转发您的评论作为答案,我明白了 作为答案发布。很高兴我能帮上忙。 【参考方案1】:

我建议为此使用托管代码,而不是通过互操作执行此操作。看看WebRequest Class。另外,请查看我对 *** 问题 C# https login and download file 的回答,了解如何使用此类的工作示例。

【讨论】:

以上是关于如何在 C# 互操作中使用 InternetQueryOption?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 和 C++ 之间进行互操作

如何在 C# Excel 互操作中格式化公式结果?

使用 COM 互操作从非托管 C++ 访问 c# 属性

使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?

C# ArrayList 与 C++ 互操作

如何从 C# 应用程序中正确清理 Excel 互操作对象?