Rtlmovememory, Error: String Too Large

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#1
Привет знатокам WinAPI
Ребят, подскажите, пожалуйста, в чем проблема, бо я что-то не могу понять :)

при выполнении функции RtlMoveMemory, происходит ошибка с текстом "String too large".
возможно эту ошибку по своему понимает среда выполнения и текс не соответствует системному, а может и соответствует.
кто может пояснить, что это за ошибка и как с ней бороться?..

немного описания и кода:

Код:
Declare Public Sub W32_CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (destination As Any, Byval source As Any, Byval length As Long)

Type REPLHIST_SUMMARY
ReplicationTime As TIMEDATE
AccessLevel As Integer
AccessFlags As Integer
Direction As Integer
ServerNameOffset As Long
ServerNameLength As Integer
FileNameLength As Integer
Spare1 As Long
Spare2 As Long
End Type


Dim summary As REPLHIST_SUMMARY
Dim mEntries As Variant
Dim sRepTime As String, sHold As String, sTemp As String
Dim hDb As Long, status As Long, hSummary As Long, lEntries As Long, hLock As Long
Dim nLoop As Integer, cbReturn As Integer, nPos As Integer
Dim sumLen As Long

hDb = NsfDbOpen(db.Server, db.FilePath)

status = W32_NSFDbGetReplHistorySummary(hDb, 0, hSummary, lEntries)

********************************************
' ЭТА ФУНКЦИЯ ЗАПОЛНЯЕТ В ПАМЯТИ ПО АДРЕСУ hSummary НЕКОТОРЫЕ СТРУКТУРЫ В КОЛИЧЕСТВЕ lEntries
' ИСХОДЯ ИЗ ТОГО, ЧТО lEntries = 2, ТО ФУНКЦИЯ ВЫПОЛНИЛАСЬ КОРРЕКТНО
********************************************

Call CheckNotesApiStatus(status)
If (lEntries > 0) Then
Redim mEntries(lEntries - 1)
' get time and direction.
sRepTime = Space(MAXALPHATIMEDATE + 1)
hLock = W32_OSLockObject(hSummary)
For nLoop=0 To lEntries-1
sumLen = Lenb(summary)
Print Cstr(sumLen)

' ТУТ БУДЕТ 30

Call W32_CopyMemory(summary, hLock&, Lenb(summary))

********************************************
' ТУТ ВОЗНИКАЕТ ОШИБКА String too large
********************************************

...
Next
...
end if
спасибо заранее за ответ! ;)
 
04.09.2006
2 566
2
#2
На форуме вроде не первый день, а пункта правил 2.4 не видели? Последнее предупреждение...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#3
European, хоть забань, а не могу найти правил :)
подозреваю. что из-за открытия одной темы в нескольких разделах? прошу прощения, просто народ обычно торчит в одном разделе, а вопрос такой, что могут знать людя и там, и тут...
или я чего-то не так понял?..

зы: я слепой :) нашел
 

Gamlet

Well-Known Member
08.01.2007
525
0
#4
Тоесть строка длинная черезчур. Попробуй взять строку в 1-2 символа и провести с ней. Если та же ошибка-значит и впрямь некорректно отвечает.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#5
Тоесть строка длинная черезчур
ну, это прямо в сообщении и указано :rolleyes: а вот какая?! если это источник, т.е. то что лежит по адресу hLock, то от нее я беру только часть, по-идее, он должен только кусок указанной длинны взять и положить в приемник, который содержит фиксированный кусок памяти (целые типы, память зарезервирована)

я вообще порылся, пишут, что эта фукнция возьмет то, что укажут и положит куда укажут, если попытаются положить что-то большее чем влазит, то она может заменить данные в области памяти за приемником и побить там инфу, если эта область кем-то занята; если пытаются взять больше чем в источнике, то она вернет кроме нужных данных еще какие-то, которые соотв. лежат за областью памяти источника... (ну, надеюсь понятно описал)

самое интересное, что этот же код работал некоторое время назад... после этого изменились данные, которые он читает, но их не стало больше, изменилось содержание, а не количество данных...

Попробуй взять строку в 1-2 символа и провести с ней
вот тут не понял, вместо длинны указать 1-2 или че?..