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

для защиты Windows приложений

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

Visual Basic 6.0 - FileName, FilePath


Re: FileName, FilePath

From: Alexander Trishin <trialFORSPAM [@] trishin.com>


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 <belmis [@] mail.belpak.by>


Привет, 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<VARIANT*>((void*) buf);

AT> if ( v->vt != (VT_ARRAY | VT_UI1)) return 0;

AT> SAFEARRAY *sf = static_cast<SAFEARRAY*>((void *)v->pparray);

AT> BYTE *data = static_cast<BYTE*>((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 <belmis [@] mail.belpak.by>


Привет, 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 <belmis [@] mail.belpak.by>


Привет, 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" <gorokhovsky [@] ism.ru>


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" <vde [@] ufanet.ru>


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" <fornews [@] systems21.ru>


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: ievgrafo<AT>systems21{DOT}ru

* Origin: Cronyx Plus ISP (2:5020/400)