Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: передача указателя структуры? :( Добавлено: 09.11.04 15:59  

Автор вопроса:   j3d1 | ICQ: 8370005 
 скорее всего я где-то чёто не досмотрел, а может и нет :(. Трабла собственно в том что я передаю из сишной функции указатель на структуру в вб, численные переменные отображаются нормально, вот со стрингами проблема, вб хавает только 1 символ.

 наглядный сэмпл
Public Type cSes
   cname As Long 'LPWSTR sesi502_cname;
   username As Long 'LPWSTR sesi502_username;
   num_opens As Long 'DWORD sesi502_num_opens;
   time As Long 'DWORD sesi502_time;
   idle_time As Long 'DWORD sesi502_idle_time;
   user_flags As Long 'DWORD sesi502_user_flags;
   lctype As Long 'LPWSTR sesi502_cltype_name;
   transport As Long 'LPWSTR sesi502_transport;
End Type

^^^ структура в которую передаются значения таким вот макаром
 dim struct as cSes
  
  ret = SomeFunction()

  в переменной ret сщдуржится адрес на начало структуры, затем

   CopyMemory struct,ByVal ret,lenb(struct)
     
    struct.time // - отображаятся нормально
    struct.username // - содержит указатель на стринг, его я получаю следующим способом
   dim tString as string
    tString = string(255,0)
   lstrcopyA(tString,struct.username) // это API функция
    дальше обрезаю нули, и возврашяет только 1 символ :(

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #1 Добавлено: 09.11.04 16:35
Попробуй
Dim tString As String * 255

Ответить

Номер ответа: 2
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 09.11.04 16:45
LPWSTR - это вроде wide, попробуй преобразовать его сначала в ascii
И попробуй определить длину строки в байтах и сравнить с количеством букв+завершающий ноль. Может это даст доп. инфу

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 09.11.04 17:55
То что в Си текстовое поле типа: LPWSTR/LPSTR это для нас VB'шников обычные Long'и. Т.е. там для нас будет храниться указатель на сам буфер со строкой.

Ответить

Номер ответа: 4
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 10.11.04 09:14
2dNW Тогда уж Dim tString(255) As Byte
LPWSTR = ByVal as String. Разумеется, long, только вот длину этого буфера узнать трудновато. ВБ не ахти как работает с NTS. Хотя можно и через АПИ.

Ответить

Номер ответа: 5
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 10.11.04 09:18
Возможно еще зависит от оси. Так, под 2000/ХР обычно используется Unicode, для 98/ME - ANSI. Т.е. LPWSTR или LPSTR - это еще вопрос, и зависит он во многом от библиотеки.

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 10.11.04 11:15
ЗЫ
для того тобы узнать длинну строки по ее адресу можно использовать АПИ:
lstrlenA
lstrlenW

при этом ByVal .. As String надо бы заменить на ByVal .. As Long

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 10.11.04 11:32
Оно понятно, но сложнее определить какая именно длина имеется ввиду - в
байтах или в символах. Функция об этом ничего не говорит.

Ответить

Номер ответа: 8
Автор ответа:
  j3d1



ICQ: 8370005 

Вопросов: 34
Ответов: 466
 Профиль | | #8 Добавлено: 12.11.04 21:08
эээ, тавариши, всем пасиба я с этим уже давно розбрался.


ЗЫ. решение нашёлв MSDN

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам