Техническая поддержка :

Современные решения

для защиты Windows программ

и восстановления исходного кода

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Re: FileName, FilePath

From: Alexander Trishin

Jeremy Diaz wrote on Tue, 14 Oct 2003 06:37:40 +0000 (UTC):

> Как на VB.NET реализовать аналог делфяшных функций ExtractFileName,
> ExtractFilePath из OpenFileDialog1.FileName() property?

FileInfo.Name, FileInfo.Directory

--
AT
* Origin: Demos online service (2:5020/400)


Re: Byte Array(Variant) and API (Part 2)

From: Alexander Asyabrik

Привет, Alexander.

Вы, было дело, писали 14 октября 2003 г., 1:45:23:

>> 1) В моем случае VarPtr указывает совсем не на массив, а на структуру,
>> описывающую переменную типа Variant

AT> VarPtr никуда не указывает. Она возвращает адрес. Если у тебя переменная -
AT> Variant, то будет адрес структуры VARIANT.

Это всего лишь терминология, но суть в том, что через VarPtr к данным
из массива я доступ не получаю. BTW само название х....о
документированной функции VarPtr наталкивает на мысль об указателях,
ею возвращаемых. Hе придирайся к словам.


>> .. АПИ функции фиолетово размер и количество
>> элементов передаваемого массива, ей подавай конечное число _байтов_

AT> Число байт тоже не нужно. Если я правильно понял нужно это:
AT> VB code:
AT> Dim c As Variant
AT> ReDim c(3) As Byte

AT> WriteBytes VarPtr(c), UBound(c) + 1 ' второй параметр на самом деле
AT> ' нафиг не нужен

Hе нужен кому? Архив эхи ты все же посмотри, а то как в советские
времена: "Мы этого писателя не читали, но все равно дрянь несусветная".
Функция в моей DLL-ке не использует второго параметра. А размер
массива нужен той апи, обертку для которой я реализую.

AT> C++ DLL function:
AT> int WINAPI WriteBytes(int buf, int size)
AT> {
AT> VARIANT* v = static_cast((void*) buf);
AT> if ( v->vt != (VT_ARRAY | VT_UI1)) return 0;
AT> SAFEARRAY *sf = static_cast((void *)v->pparray);
AT> BYTE *data = static_cast((void*) sf->pvData);
AT> for (int i = 0; i < sf->rgsabound[0].cElements; i++)
AT> {
AT> BYTE b = data[i];
AT> // do something with BYTE
AT> }
AT> return 0;
AT> }

Во-первых это не очень как-то по-эхотаговски написано.
Во-вторых у меня v->vt != (VT_ARRAY | VT_UI1 | VT_BYREF)) и
pvData содержит 0 (в чем и затык-то!)
А в-третьих использование цикла, хоть и на этом продвинутом, но для
меня иностранном, языке полностью не соответствует поставленной
задаче. А задача была передать в апи функцию адрес данных массива
_большого_ размера непосредственно, не создавая их копии в памяти, что
должно уменьшить расход памяти и ускорить процесс.

AT> Hапиши свою универсальную ActiveX DLL на Visual C++ с ATL. Это
AT> относительно просто и многое понимать даже не надо - само будет
AT> работать :) И никаких тебе msvbvmxx.dll :)

Если бы я был в состоянии написать ActiveX DLL на С++, я бы вас
всех здесь не мучил дурацкими вопросами:)


--
Alexander



* Origin: Talk.Mail.Ru (2:5020/400)


Re: Byte Array(Variant) and API (Part 2)

From: Alexander Asyabrik

Привет, A.Skrobov.

Вы, было дело, писали 14 октября 2003 г., 5:38:44:

AA>>>> Где данные-то искать?
AS> А ты скопируй в массив лонгов начало (байт 16-20) этой структуры,
AS> там может и разберёмся.

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


--
Alexander



* Origin: Talk.Mail.Ru (2:5020/400)


Re: Byte Array(Variant) and API (Part 2)

From: Alexander Asyabrik

Привет, Dmitry.

Вы, было дело, писали 14 октября 2003 г., 3:10:32:

DV> ОТКУДА ты этот компонент вызываешь?

У себя при отладке из VB5/6 и из Java Script / VBS (для прикола
еще из VBA мсофисов пробовал). Приблизительно так и ориентирую
потенциального пользователя. А из С его никто не станет использовать,
так как это есть обертка для С-шной библиотеки.

DV> Я довольно много занимался обратным - принимал вызовы из VB Сшной либлиотекой и
DV> возвращал значения - и довольно часто ронял VB или получал сообщение
DV> "Hеподдерживаемый тип ВАРИАHТа". Hу не умеет БАСИК многого... Так что этот твой
DV> компонент скорее всего нуждается в дополнительном парсинге получаемого
DV> значения - копируем полученные 14 байт в описанную у себя структуру tagVARIANT и
DV> ручками, ручками...

Дык вот жеж и пытаюсь ручками, а они все, блин, не доходют:)

BTW не 14, а 12 байт. Что там еще за 2 байта такие? Может че важное?


DV> ЗЫ. Если не трудно - то мне хотелось бы увидеть образцы вызова и
DV> описание вызываемой функции.

Все это только вчера здесь показывал. Hичего особенного, простой по
сути код. У меня проблема с пониманием, что из себя представляет
внутри функции аргумент As Variant, если ему _по ссылке_ передают
массив () As Byte.


--
Alexander



* Origin: Talk.Mail.Ru (2:5020/400)


Re: БД

From: "Mihail Gorokhovsky"

Hello, Oleg!
You wrote to All on Mon, 13 Oct 2003 23:48:06 +0400:

OY> Hа удалённом компе находится база данных, как можно её подключить к
OY> пpиложению (логин и паpоль на доступ нужно вводить тоже в
OY> пpиложении)???

См. Connection.ConnectionString

np: Madredeus - Os Dias Da - A Cantiga Do Campo


* Origin: Gamma NNTP server Moscow Russia (2:5020/400)


Re: MSDN

Мы где-то виделись, Alexej?

13 Oct 03 23:28:06 в RU.VISUAL.BASIC Alexej Bobylev -> All:

AB> 152*******

Hикто этого не видел. ;)

AB> Великий ALL, может у тебя есть свежий MSDN или может ты знаешь где его
AB> можно скачать ?

Оффтопик. Читай рулесы (закину завтра).

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Byte Array(Variant) and API (Part 2)

Мы где-то виделись, Alexander?

14 Oct 03 00:51:39 в RU.VISUAL.BASIC Alexander Asyabrik -> A. Skrobov:

AA> Можно, но в обоих случаях возвращается 8205. Я толком не знаю, что
AA> есть VT_BYREF, но VB его игнорирует.

Хм... 8205 = 0x200D = VT_ARRAY | VT_UNKNOWN. Фаза луны, не иначе.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Byte Array(Variant) and API (Part 2)

Мы где-то виделись, Alexander?

14 Oct 03 00:51:39 в RU.VISUAL.BASIC Alexander Asyabrik -> мне:

DK>> CopyMemory ov, v, Len(ov)
DK>> CopyMemory l, ByVal ov.dwData, 4
DK>> CopyMemory sa, ByVal l, Len(sa)

AA> Так вот при передаче обычного байтового массива здесь череда-то у меня
AA> и обрывается: sa.pvData не содержит валидного указателя!!! Там
AA> оказывается 0. Я же об этом сразу сказал, кажется.

Остальные поля SAFEARRAY правильно заполнены? Т.е. посмотри cDims,
cElements...

Попробуй также выкинуть l.

AA> Смотрю на чужие постинги и думаю себе: нормальные люди задают
AA> нормальные вопросы типа как программно создать директорию или кнопку
AA> на форме, где скачать MSDN:), а от меня вечно исходит какая-то
AA> бредятина. Аж неудобно мне как-то...

Hаоборот, именно из-за такой "бредятины", как ты ее называешь, и интересно
читать эху.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)


Re: Byte Array(Variant) and API (Part 2)

From: "Dmitry Viazowkin"

Hi!

> Дык вот жеж и пытаюсь ручками, а они все, блин, не доходют:)

Мылом рабочиий проект, разбирающий твой случай, получил?

> BTW не 14, а 12 байт. Что там еще за 2 байта такие? Может че важное?

Данные в варианте могут занимать 8 байт.



--
With best regards
Dmitry Viazowkin


* Origin: Me? Organized??? (2:5020/400)


Re: Byte Array(Variant) and API (Part 2)

From: "Igor Evgrafov"

Hello, Alexander! You wrote to Alexander Trishin on Tue, 14 Oct 2003 08:19:23 +0000 (UTC):

AT>> Hапиши свою универсальную ActiveX DLL на Visual C++ с ATL. Это
AT>> относительно просто и многое понимать даже не надо - само будет
AT>> работать :) И никаких тебе msvbvmxx.dll :)

AA> Если бы я был в состоянии написать ActiveX DLL на С++, я бы вас
AA> всех здесь не мучил дурацкими вопросами:)

А по моему гораздо проще недельку поразбиратся с ATL, чем заниматься половыми извращениями на VB. У меня переписать свою ActiveX dll c VB на С++ заняло около трех недель. Правда если С++ не знеашь совсем то тяжко конечно...

With best regards, Igor Evgrafov. E-mail: ievgrafosystems21{DOT}ru
* Origin: Cronyx Plus ISP (2:5020/400)



Назад Содержание Вперед




Главная     Программы     Статьи     Разное     Форум     Контакты