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)