|
|
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, уважаемые! Подскажите пожалуйста как получить адресс null-терминированной строки? Т.е. есть: Код: plaintext 1. 2. Надо получить адрес этой конструкции, не подскажите как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 18:31 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
В общем это был глупый вопрос. Он уже снят. Но зато появился другой: Когда в результате выполнения функции из dll возвращается null-терминированная строка, и я пытаюсь ее считать в переменную то вываливается ошибка VB: AppName: vb6.exe AppVer: 6.0.89.88 ModName: kernel32.dll ModVer: 5.1.2600.3119 Offset: 00009d92 Как с этим бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 18:55 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > В общем это был глупый вопрос. Он уже снят. Самокритика это хорошо ;) > Но зато появился другой: Когда в результате выполнения функции из dll возвращается > null-терминированная строка, и я пытаюсь ее считать в переменную то вываливается ошибка > VB: А как пытаешся считать? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2008, 19:16 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
При вызове функции я использую пользовательский тип данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. P.S. извини что долго не отвечала - заболела и провалялась 2 дня ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 09:37 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > При вызове функции я использую пользовательский тип данных: > > Type TMTEMsg > DataLen As Long > Data As String > End Type > > 'объявление функции из dll: > Private Declare Function DF_Structure& Lib "my.dll" _ > Alias "MTEStructure" ( _ > ByVal Idx As Long, _ > ByRef Msg As TMTEMsg) > > 'И собственно вызов: > Dim Msg As TMTEMsg, Idx& > > Idx = DF_Structure(Idx, Msg) Вылетает на вызове функции, или при попытке считать данные из структуры Msg? Может нужно перед вызовом сделать так: 'И собственно вызов: Dim Msg As TMTEMsg, Idx& Msg.Data = Space(255) 'Или сколько нужно Idx = DF_Structure(Idx, Msg) > P.S. извини что долго не отвечала - заболела и провалялась 2 дня ( То-то я думаю, чего начал заболевать, а это от тебя -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 10:24 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Странно, но сейчас уже не вылетает. после того как я поставила Код: plaintext P.S. Не знала, что зараза может быть перенесена посредствам интернета из Москвы на Украину извини что заражаю Бенедикт Книга Дена Эппелмана у меня под рукой и я понимаю, что тип данных LPSTR-это 32-разрядный указатель на строку, завершенную null-символом. Только я вот не понимаю как эту строку мне считать в VB ((. Спасибо за ссылку очень полезно для ликбеза :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 12:59 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Товарищи, ну помогите же немного туповатой програмисту-женщине Ну не понимаю я как из буффера считать данные, которые передались при вызове функции из dll в указатель на пользовательский тип данных. Повторюсь тип данных объявлен как: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 14:31 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Товарищи, ну помогите же немного туповатой програмисту-женщине Ну не понимаю я как > из буффера считать данные, которые передались при вызове функции из dll в указатель на > пользовательский тип данных. Пообедать дашь? > Повторюсь тип данных объявлен как: > > Type TMTEMsg > DataLen As Long > Data As String > End Type > как из этого типа данных считать данные в Data? судя по структуре и тому что я знаю, скорее всего перед вызовом функции нужно инициализировать строку, обычно делаю это пробелами, а в поле DataLen положить длину этой строки. Тогда при вызове в функции возможно идет считывание из DataLen длины подготовленной строки и исходя из этого эта строка заполняется данными и в DataLen записывается длина заполненных данных. Возможно нужно делать первый вызов "холостым" и в DataLen смотреть какой длины нужна строка и распределять строку перед повторным вызовом. Возможно есть ещё подводные рифы я помог Kallandor*ВЫРЕЗАННО ЦЕНЗУРОЙ* програмисту-женщине? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:05 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, это не Эпплман. Почитайте. Вариантов много. Вот, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:19 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Ну не совсем помог :( Потому как я не понимаю что не правильно или чего не хватает в последовательности дейстий: 1.перед вызовом функции я инициализирую пробелами Msg.Data 2. Вызываю функцию DF_Structure 3. В поле Msg.DataLen действительно получается размер полученных данных По моей логике (которая может отличаться от программной) после вызова DF_Structure в поле Msg.Data должны появляться собственно строковые данные, а их нет :( только пробелы, инициализированные в начале :( Что неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:22 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Бенедикт Сделала так как вы подсказали. Debug.Print - ничего не вывел, видать потому что в Msg.Data содержатся null символы или что-то еще. В общем когда наводишь курсор на поле Msg.Data, то строка показана в виде квадратиков (ну как chr(13)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:34 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, бесполезный разговор без кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:37 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Игорь Горбонос > > Ну не совсем помог :( Потому как я не понимаю что не правильно или чего не хватает > в последовательности дейстий: > 1.перед вызовом функции я инициализирую пробелами Msg.Data > 2. Вызываю функцию DF_Structure > 3. В поле Msg.DataLen действительно получается размер полученных данных > > По моей логике (которая может отличаться от программной) после вызова DF_Structure > в поле Msg.Data должны появляться собственно строковые данные, а их нет :( только > пробелы, инициализированные в начале :( Что неправильно? А что говорит документация к этой функции? KallandorВ общем когда наводишь курсор на поле Msg.Data, то строка показана в виде квадратиков (ну как chr(13)) Может эти квадратики и есть та информация, которая ожидается ;) -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:40 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Вообще может выложишь свою длл, что-бы можно было посмотреть на неё поближе? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 15:41 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Вообще может выложишь свою длл, что-бы можно было посмотреть на неё поближе? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 Игорь, извини, но dll выложить наверное не могу Описание поля Data: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Вот, собственно когда я объявляю Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:33 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Почитал тему "Dll не подключается". Там есть такое сообщение: KallandorКодов dll нет. Вызов функции из dll: Код: plaintext 1. 2. 3. 4. 5. 6. [GENERAL] Logging=1 ClientLogsDir=./Logs ClientLogLevel=2 ErrLog=./Logs/ErrorLog.txt Пример описания и вызова функции на C++: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. В-третьих, Params входной параметр, ErrorMsg - выходной, сишный пример даёт образец для VB-кода: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:38 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
БенедиктВо-первых, есть ошибочка: Код: plaintext 1. 2. 3. В-третьих, Params входной параметр, ErrorMsg - выходной, сишный пример даёт образец для VB-кода: Код: plaintext 1. 2. 3. 4. 5. 6. С первым замечанием не согласна, потому как :Private Declare Function DF_Connect & Lib "mtesrl.dll" _ Alias "MTEConnect" ( _ ByVal Params As String, _ ByVal ErrorMsg As String) As Long Дальше. Я действительно не знаю разницу в объявлении переменных, используемых dll через API, при входных и выходных параметрах Ну а на счет третьего замечания полностью согласна, так как исключить Null-символы действительно надо, только я думала, заменить их replace Собственно вопрос то остался по вызову другой функции, коннект проходит успешно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:46 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, я указывал на несоответствие сишного прототипа DF_Connect VB-шному (в рамках того сообщения; может быть, Вы его уже поправили в реальном коде, но по обсуждению этого не видно). Про DF_Structure(). Не стоит рассматривать поле Data как строковое, судя по описанию. Я бы в Declare параметр вообще написал As Any, и передавал первый байт байтового массива. Есть способ определить его размер заранее? Или ограничение на длину? Кстати, как описаны элементарные типы в "прил. 5"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 16:59 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
БенедиктKallandor, я указывал на несоответствие сишного прототипа DF_Connect VB-шному (в рамках того сообщения; может быть, Вы его уже поправили в реальном коде, но по обсуждению этого не видно). Про DF_Structure(). Не стоит рассматривать поле Data как строковое, судя по описанию. Я бы в Declare параметр вообще написал As Any, и передавал первый байт байтового массива. Есть способ определить его размер заранее? Или ограничение на длину? Кстати, как описаны элементарные типы в "прил. 5"? C первым абзацем согласна - потому как не помню По второму абзацу: 1. Если я объявляю поле Data as Variant, то тоже пустота. 2. Зараннее нет способа определить размер, ограничения на длину тоже нет 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:12 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor Кстати о птичках! А каков KallandorПример описания и вызова функции на C++: для этой функции? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:40 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
-- С уважением Горбонос Игорь Леонидович "Игорь Горбонос" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:6258207@sql.ru... > Автор: Игорь Горбонос > Отсюда скачал описание. там написанно: Получение описания информационных объектов Описание информационных объектов торговой системы содержит список таблиц, транзакций, их полей и некоторых вспомогательных объектов, доступных клиенту. Для получения описания используется функция MTEStructure. function MTEStructure(Idx: Integer; var Msg: PMTEMsg): Integer; Аргументы: Idx Дескриптор соединения, для которого нужно получить информацию. Msg Адрес переменной (имеющей тип "указатель на TMTEMsg"), куда будет помещен указатель на буфер, содержащий описание информационных объектов. Формат буфера описан в приложении 1. Структура TMTEMsg определена так: PMTEMsg = ^TMTEMsg; TMTEMsg = record DataLen: Integer; // Длина следующих далее данных Data: record end; // Данные переменной длины end; Насколько я знаю делфи, то рекорд это структура, давай описание этой структуры Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:49 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:52 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
есть большое подозрение, что ту dll писали не для юзайнья из VB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:55 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Собственно у меня еще один вопрос: Если мне нужно создать пользовательский тип данных, одно из значений которого будет типа string, а другое может принимать только определенные значения могу ли я написать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:57 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ??? что это, почему там Const ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 17:59 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
может вам нужно это: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:00 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Указатель на указатель структуры TMTEMsg, куда будет помещен указатель на буфер, > содержащий описание информационных объектов. Формат буфера описан в приложении 2. Давай описание буфера из приложения 2 > Память под данный буфер выделяется и освобождается библиотекой. Структура TMTEMsg > определена так: > > -------- C language -------- > typedef struct TMTEMSG_TAG > { > long DataLen; // Длина следующих далее данных > // char Data[DataLen];// commented – pseudo field > } TMTEMSG; > , причем данные длиной DataLen следуют непосредственно за данными данной структуры. Это > сделанно для обеспечения совместимости с продуктами реализованными на Delphi. Интересное решение. А ты уверена, что им можно воспользоватся из VB? Может проще сделать обертку на С или Делфи которую уже можно будет использовать из VB? -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:01 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, посмотрел наискось документацию по MTESRL.DLL (не уверен, что та же версия). Морочите Вы нам головы, сударыня :) документация по MTESRL.DLLПОЛУЧЕНИЕ ОПИСАНИЯ ИНФОРМАЦИОННЫХ ОБЪЕКТОВ Описание информационных объектов торговой системы содержит список таблиц, транзакций, их полей и некоторых вспомогательных объектов, доступных клиенту. Для получения описания используется функция MTEStructure. Код: plaintext Idx Дескриптор соединения, для которого нужно получить информацию. Msg Адрес переменной (имеющей тип "указатель на TMTEMsg"), куда будет помещен указатель на буфер, содержащий описание информационных объектов. Формат буфера описан в приложении 1. Структура TMTEMsg определена так: Код: plaintext 1. 2. 3. 4. В случае успеха функция возвращает MTE_OK и помещает в аргумент Msg указатель на буфер с описанием. При возникновении ошибки возвращается один из кодов ошибки MTE_xxxx. Если возвращен код ошибки MTE_TSMR, поле Data структуры Msg содержит текст сообщения об ошибке длиной DataLen символов. Пример: Получение описания доступных информационных объектов для сеанса с номером Idx. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. P.S. Гы. Но не буду стирать набранное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:01 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Konst_Oneможет вам нужно это: Код: plaintext 1. 2. 3. 4. Спасибо. Просто не знала как это делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:08 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Kallandor > Указатель на указатель структуры TMTEMsg, куда будет помещен указатель на буфер, > содержащий описание информационных объектов. Формат буфера описан в приложении 2. Давай описание буфера из приложения 2 С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 В переводе на VB это описание выгледит примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. Вот, собственно это перевела я, поэтому имеются огромные сомнения по поводу строк Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:20 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, это не в ту степь. Вы надеетесь, что, если Вы "правильно" опишите структуры, VB "сам" правильно сделает десериализацию. Не сделает. Придётся делать самой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:31 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Kallandor, ты можешь dll править? Если нет, то лучше возьми какую-нибудь другую библиотеку. Проблема в том, что в исходном тексте поле Data не является членом структуры вообще. Оно всего-лишь предполагает что поле Data будет лежать в динамической памяти рядом с DataLen, но не требует этого от компилятора. В зависимости от ключей оптимизации данный код может работать а может и не работать - как ветер на Марсе подует. Из VB (у которого совершенно другой принцип работы с динамическими переменными на стеке) эту процедуру успешно вызвать - нереально совершенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:36 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
БенедиктKallandor, это не в ту степь. Вы надеетесь, что, если Вы "правильно" опишите структуры, VB "сам" правильно сделает десериализацию. Не сделает. Придётся делать самой. Ну понятно, что мы с VB перекладываем друг на друга работу Собственно у меня к вам вопрос: Согласно вашему варианту я написала: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. И собственно вылетает VB просто закрывается и все ((( Что неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:37 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, на всякий случай дайте ещё описание CopyMemory. В какой строке вылетает при пошаговом проходе? MainIdx имеет правильное значение? Чему равен nErr? Чему равно lpMsg (должно быть больше нуля)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:46 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
В общем, каковы значения локальных переменных перед шагом, приводящем к вылету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 18:49 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
БенедиктВ общем, каковы значения локальных переменных перед шагом, приводящем к вылету? Это я ошиблась. Написала declare не Sub, а Function и поэтому вылетало. Когда переименовала и переконвертировала из byte в chr, то выдался впринципе понятный текст Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2008, 19:42 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Kallandor, лучше сделайте нормальные примитивы десериализации, типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 11:50 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Бенедикт Ех, осознаю написанное я долго :( А вот скажи пожалуйста, не знаешь ли ты почему выполнения кода, написанного тобою на пост выше (с CopyMemory) все же валится с ошибкой? Вот, я выполняю следующий кусок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. Валится на Код: plaintext Я не понимаю из-за чего? Вот, и еще у меня там байтовый массив, который в зависимости от выполняемой команды возвращает ту или иную структуру данных, поэтому я сомневаюсь на счет прямой работы со строками. Вот. Собственно выслушаю советы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 12:23 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor Ты вот скажи, вызываешь как lpMsg > nErr = DF_Refresh(Idx, lpMsg ) а работаешь с Msg > CopyMemory Msg .DataLen, ByVal lpMsg, 4 ??? ;) > Вот. Собственно выслушаю советы :) -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 12:49 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Kallandor Ты вот скажи, вызываешь как lpMsg > nErr = DF_Refresh(Idx, lpMsg ) а работаешь с Msg > CopyMemory Msg .DataLen, ByVal lpMsg, 4 ??? ;) > Вот. Собственно выслушаю советы :) -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 Игорь, в данном случае lpMsg - указатель на структуру данных (байтовый массив). Структура определена типом Код: plaintext 1. 2. 3. 4. 5. 6. 7. Собственно экспериментально установлено, что конструкция Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 12:58 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Игорь, в данном случае lpMsg - указатель на структуру данных (байтовый массив). > Структура определена типом > > Type TMTEMsg > DataLen As Long > Data() As Byte > End Type > > '... > Dim Msg as TMTEMsg Понятно :) > > Собственно экспериментально установлено, что конструкция > > CopyMemory Msg.DataLen, ByVal lpMsg, 2 > ReDim Msg.Data(0 To Msg.DataLen - 1) As Byte > CopyMemory Msg.Data(0), ByVal lpMsg + 2, Msg.DataLen > работает. И мне не понятно за что отвечает цифра 4 (она была третьим передаваемым > параметром в первом варианте) и почему когда ее заменить на 2, то все проходит. А на 3 > не проходит. Вот, странно Ты как первый раз замужем!!! 4 байта - размер DataLen, размер типа Long, почему работает при 2 мне тоже не совсем понятно, потому что я ожидал работу при 4. -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 13:07 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос Ты как первый раз замужем!!! 4 байта - размер DataLen, размер типа Long, почему работает при 2 мне тоже не совсем понятно, потому что я ожидал работу при 4. -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 Ех, замужем я ни разу еще не была а вот в процессе эксплуатации выяснилось что с 2 работает через раз - стандартно. А с 4 вообще ни разу. Буду экспериментировать дальше с циферками. Игорь, а ты не мог бы кинуть ссылки где было бы написано про xml,xsl как для чайников, то есть интересно как создавать подобные файлы, как загружать их в VB и считывать из них данные? Т.о. я прошу тебя научить меня пользоваться поиском, только не за дорого, а за что-нибудь попроще ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 14:44 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Игорь Горбонос > > Ты как первый раз замужем!!! 4 байта - размер DataLen, размер типа Long, > почему работает > при 2 мне тоже не совсем понятно, потому что я ожидал работу при 4. > > -- > С уважением Горбонос Игорь Леонидович > > Posted via ActualForum NNTP Server 1.4 > > > Ех, замужем я ни разу еще не была Это возрастное :) > а вот в процессе эксплуатации выяснилось что с 2 работает через раз - стандартно. А > с 4 вообще ни разу. Буду экспериментировать дальше с циферками. Да нечего там експерементировать. Нужен отладчик и смотреть, что, куда и когда возвращает > > Игорь, а ты не мог бы кинуть ссылки где было бы написано про xml,xsl как для > чайников, то есть интересно как создавать подобные файлы, как загружать их в VB и > считывать из них данные? Т.о. я прошу тебя научить меня пользоваться поиском, только не > за дорого, а за что-нибудь попроще ? Ну, для начала http://xml.nsu.ru/ -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 15:11 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Игорь, а ты не мог бы кинуть ссылки где было бы написано про xml,xsl как для > чайников, то есть интересно как создавать подобные файлы, как загружать их в VB и > считывать из них данные? Т.о. я прошу тебя научить меня пользоваться поиском, только не > за дорого, а за что-нибудь попроще ? напиши мне -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 16:16 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
KallandorА вот скажи пожалуйста, не знаешь ли ты почему выполнения кода, написанного тобою на пост выше (с CopyMemory) все же валится с ошибкой? Значение Msg.DataLen = 80035848CopyMemory() - небезопасная функция. Всегда надо проверять адреса источника, приёмника, и длину копируемого блока. Здесь длина явно неправильная. Либо ты что-то не показываешь и неправильно делаешь, или Integer у них 16-битный. Выравнивание в структуре, опять, неизвестно. В общем, это вопрос отладки. Надо брать дамп данных, и смотреть, что там реально лежит. Kallandor Код: plaintext 1. 2. 3. KallandorВот, и еще у меня там байтовый массив, который в зависимости от выполняемой команды возвращает ту или иную структуру данных, поэтому я сомневаюсь на счет прямой работы со строками.Какая разница? Если документация соответствует действительности, то предложенные мной примитивы десериализации вполне рабочие. Кстати, байтовый массив в строку можно превратить довольно легко: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 16:39 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Бенедикт KallandorА вот скажи пожалуйста, не знаешь ли ты почему выполнения кода, написанного тобою на пост выше (с CopyMemory) все же валится с ошибкой? Значение Msg.DataLen = 80035848CopyMemory() - небезопасная функция. Всегда надо проверять адреса источника, приёмника, и длину копируемого блока. Здесь длина явно неправильная. Либо ты что-то не показываешь и неправильно делаешь, или Integer у них 16-битный. Выравнивание в структуре, опять, неизвестно. В общем, это вопрос отладки. Надо брать дамп данных, и смотреть, что там реально лежит. Вот, ты правильно сформулировал мое предчувствие. Мне дейтвительно кажется что у них один раз 16-разрядное смещение, а другой раз 32-разрядное. Собственно как отловить и узнать это смещение для меня остается вопросом. Бенедикт Kallandor Код: plaintext 1. 2. 3. Согласна с твоим замечанием, но когда по факту имеешь массив байтовый массив Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. То по-тупому его можно конечно преобразовывать так как я написала, а по-умному будет наверное так Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если речь идет о числах, а некоторые byte'ы следует трактовать как числа, то при пререводе в chr символов от 0 до 32 или 33 (не помню точно) это будут нечитаемые квадратики, а не реальные числа. Собственно если этот момент можно как-нибудь обойти, то я с удовольствем откажусь от CopyMemory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 19:07 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
Игорь Горбоноснапиши мне Ок, почитаю сайт, который ты порекомендовал и буду донимать вопросами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 19:08 |
|
||
|
null-терминированная строка
|
|||
|---|---|---|---|
|
#18+
> Автор: Kallandor > Игорь Горбонос > напиши мне > > Ок, почитаю сайт, который ты порекомендовал и буду донимать вопросами :) Я имел в виду е-мейл дай, мой в моем профиле -- С уважением Горбонос Игорь Леонидович Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 19:22 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2161781]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
93ms |
get tp. blocked users: |
3ms |
| others: | 214ms |
| total: | 429ms |

| 0 / 0 |
