Rtlmovememory, Error: String Too Large

Тема в разделе "Visual Basic", создана пользователем Akupaka, 31 мар 2009.

  1. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Привет знатокам WinAPI
    Ребят, подскажите, пожалуйста, в чем проблема, бо я что-то не могу понять :)

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

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

    Код (Text):
    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
    спасибо заранее за ответ! ;)
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    На форуме вроде не первый день, а пункта правил 2.4 не видели? Последнее предупреждение...
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    European, хоть забань, а не могу найти правил :)
    подозреваю. что из-за открытия одной темы в нескольких разделах? прошу прощения, просто народ обычно торчит в одном разделе, а вопрос такой, что могут знать людя и там, и тут...
    или я чего-то не так понял?..

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

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Тоесть строка длинная черезчур. Попробуй взять строку в 1-2 символа и провести с ней. Если та же ошибка-значит и впрямь некорректно отвечает.
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну, это прямо в сообщении и указано :rolleyes: а вот какая?! если это источник, т.е. то что лежит по адресу hLock, то от нее я беру только часть, по-идее, он должен только кусок указанной длинны взять и положить в приемник, который содержит фиксированный кусок памяти (целые типы, память зарезервирована)

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

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

    вот тут не понял, вместо длинны указать 1-2 или че?..
     
Загрузка...
Похожие Темы - Rtlmovememory Error String
  1. Akupaka
    Ответов:
    0
    Просмотров:
    1.656
  2. Akupaka
    Ответов:
    0
    Просмотров:
    1.489
  3. Kalista
    Ответов:
    1
    Просмотров:
    124
  4. anna
    Ответов:
    11
    Просмотров:
    880
  5. glass44
    Ответов:
    0
    Просмотров:
    585

Поделиться этой страницей