vvs_adm писал(а):Относительный URL описывает положение ресурса, на который указывает ссылка, относительно URL текущего документа => Абсолютный URL = URL текущего документа + Относительный URL
skiperski писал(а):В общем случае, если нужнен только собственно сам URL и без разницы как он выглядит, то можно просто конкатинировать текущий URL (без имени страницы и со слэшем справа) с относительным адресом. Браузер сам разберётся куда надо обратиться.
skiperski писал(а):В общем случае, если нужнен только собственно сам URL и без разницы как он выглядит, то можно просто конкатинировать текущий URL (без имени страницы и со слэшем справа) с относительным адресом. Браузер сам разберётся куда надо обратиться.
ANDLL писал(а):skiperski писал(а):В общем случае, если нужнен только собственно сам URL и без разницы как он выглядит, то можно просто конкатинировать текущий URL (без имени страницы и со слэшем справа) с относительным адресом. Браузер сам разберётся куда надо обратиться.
Нельзя...
Ну например, http://aaa.com/A/page.html, относительно него задаем /hh.htm
Конкотенируем, и что видим? http://aaa.com/A/page.html/hh.htm ?
skiperski писал(а):В общем случае, если нужнен только собственно сам URL и без разницы как он выглядит, то можно просто конкатинировать текущий URL (без имени страницы и со слэшем справа) с относительным адресом. Браузер сам разберётся куда надо обратиться.
Т.е. такие адреса валидны:
http://www.vbstreets.ru/VBA/default.aspx
http://www.vbstreets.ru/VBA/Sources/../default.aspx
http://www.vbstreets.ru/VBA/Sources/../../default.aspx
http://www.vbstreets.ru/VBA/Sources/./default.aspx
Согласен, что там немного неправильно, но нельзя там тоже не подходит. Относительные ссылки могут быть и без первого слеша. Достаточно лишь проверить его наличие\отсутствие. Да и кроме непривычного вида, чем тебе http://aaa.com//hh.htm еще не нравится?ANDLL писал(а):Особенно про худой конец.
vvs_adm писал(а):Согласен, что там немного неправильно, но нельзя там тоже не подходит. Относительные ссылки могут быть и без первого слеша. Достаточно лишь проверить его наличие\отсутствие. Да и кроме непривычного вида, чем тебе http://aaa.com//hh.htm еще не нравится?ANDLL писал(а):Особенно про худой конец.
ANDLL писал(а):Иными словами наличие и отсутствие слыша перед именем файла имеет принципиальное значение, а не просто для крсоты там.
Да я так и не думал никогдаANDLL писал(а):Дам справку.
http://aaa.com/aaa/bbb.htm относительно него ук. /ccc.htm, имеется ввиду
http://aaa.com/ccc.htm а не http://aaa.com/aaa/ccc.htm как ты думаеш.
Option Explicit
Public Declare Function UrlCombineA _
Lib "shlwapi.dll" ( _
ByVal pszBase As String, _
ByVal pszRelative As String, _
ByRef pszCombined As String, _
ByRef pcchCombined As Integer, _
ByVal dwFlags As Integer _
) As Long
Public Function UrlCombine(ByVal Base As String, ByVal Relative As String) As String
Dim s As String
Dim sLen As Integer
Dim res As Long
s = String$(100, Chr$(0))
sLen = Len(s)
res = UrlCombineA(Base, Relative, ByVal s, sLen, 0)
Debug.Print res, sLen,
UrlCombine = Left$(s, sLen)
End Function
Function test()
Debug.Print UrlCombine("http://aaa", "bbb")
End Function
0 14 http://aaa/bbb
-2147024809 15
-2147024809 15
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
-2147024809 15
-2147024809 15
-2147024809 15
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
-2147024809 15
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
0 14 http://aaa/bbb
Private Sub Form_Load()
Dim i As Long
Dim s1 As String, s2 As String, out As String
s1 = "http://aaa"
s2 = "bbb"
out = String$(INTERNET_MAX_PATH_LENGTH, 0)
For i = 1 To 10000
If UrlCombine(s1, s2, out, Len(out), 0) <> 0 Then
Debug.Print "!!!"
End If
Next
End Sub
GSerg писал(а):Работает на 100%.
GSerg писал(а):При любом значении INTERNET_MAX_PATH_LENGTH.
Const INTERNET_MAX_HOST_NAME_LENGTH As Integer = 256
Const INTERNET_MAX_USER_NAME_LENGTH As Integer = 128
Const INTERNET_MAX_PASSWORD_LENGTH As Integer = 128
Const INTERNET_MAX_PATH_LENGTH As Integer = 2048
Const INTERNET_MAX_SCHEME_LENGTH As Integer = 32 ' This value is the longest protocol name length.
Const INTERNET_MAX_URL_LENGTH As Integer = INTERNET_MAX_SCHEME_LENGTH + 3 + INTERNET_MAX_PATH_LENGTH
GSerg писал(а):ЗЫ. Integer -> Long
GSerg писал(а):ЗЗЫ. -2147024809 = 0x80070057 = E_INVALIDARG.
skiperski писал(а):Или всё же где-то она не правильно задекларирована?
skiperski писал(а):GSerg писал(а):ЗЫ. Integer -> Long
Это к чему? Привёл бы лучше свою декларацию функции. Может там где-то у меня ошибка.
Public Declare Function UrlCombineA _
Lib "shlwapi.dll" ( _
ByVal pszBase As String, _
ByVal pszRelative As String, _
ByRef pszCombined As String, _
ByRef pcchCombined As Integer, _
ByVal dwFlags As Integer _
) As Long
Public Declare Function UrlCombineA _
Lib "shlwapi.dll" ( _
ByVal pszBase As String, _
ByVal pszRelative As String, _
ByVal pszCombined As String, _
ByRef pcchCombined As Long, _
ByVal dwFlags As Long _
) As Long
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 129