是否有可访问的COM库以允许URL编码?

时间:2009-12-31 19:53:11

标签: com vb6 urlencode

使用VB6。滚动你自己并不难,但我想知道它是否是一个预制的那个?

2 个答案:

答案 0 :(得分:4)

Bob的评论提示:Google在Karl Peterson的UrlEscape中找到了newsgroup post的这个包装器。

Private Declare Function UrlEscape Lib "Shlwapi.dll" Alias "UrlEscapeA" ( _
  ByVal pszURL As String, ByVal pszEscaped As String, ByRef pcchEscaped As Long, _
  ByVal dwFlags As Long) As Long

Private Const URL_DONT_ESCAPE_EXTRA_INFO As Long = &H2000000

Private Function EscapeURL(ByVal URL As String) As String
' Purpose:  A thin wrapper for the URLEscape API function. '
Dim EscTxt As String
Dim nLen As Long

' Create a maximum sized buffer. '
nLen = Len(URL) * 3
EscTxt = Space$(nLen)

If UrlEscape(URL, EscTxt, nLen, URL_DONT_ESCAPE_EXTRA_INFO) = 0 Then
  EscapeURL = Left$(EscTxt, nLen)
End If
End Function

免责声明:我自己没有尝试过此代码。

答案 1 :(得分:2)

您应该使用CoInternetParseUrl()和URL_ENCODE。

来自MSDN的示例,已针对您的目的进行了修改。当然,你必须弄清楚如何从VB6调用CoInternetParseUrl(),但是你似乎已经开始了。

#include <wininet.h>

// ...

WCHAR encoded_url[INTERNET_MAX_URL_LENGTH];
DWORD encoded_url_len = ARRAYSIZE(encoded_url);

// Assumes |url| contains the value you want to encode.

HRESULT hr = CoInternetParseUrl(url, PARSE_CANONICALIZE, URL_ENCODE, encoded_url, 
                        INTERNET_MAX_URL_LENGTH, & encoded_url_len, 0);
if (SUCCEEDED(hr)) {
  // Do stuff...
}

您可能需要使用PARSE_ENCODE而不是PARSE_CANONICALIZE,具体取决于您的需求。

另外,请考虑使用google-url。可能很难,因为它是C ++而不是基于COM。