Visual Basic 6.0 - Byte Array(Variant) and API (Part 2)
Re: Byte Array(Variant) and API (Part 2)
From: Alexander Asyabrik <belmis [@] mail.belpak.by>
Привет, Igor.
Вы, было дело, писали 14 октября 2003 г., 13:29:50:
IE> AA> Если бы я был в состоянии написать ActiveX DLL на С++, я бы вас
IE> AA> всех здесь не мучил дурацкими вопросами:)
IE> А по моему гораздо проще недельку поразбиратся с ATL, чем
IE> заниматься половыми извращениями на VB. У меня переписать свою
IE> ActiveX dll c VB на С++ заняло около трех недель.
Я горжусь тобой, Igor!
Так что там по поводу сабжа?
--
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 г., 13:28:47:
DV> Мылом рабочиий проект, разбирающий твой случай, получил?
Оп-па, мне сейчас на это мыло нельзя писать: там жестокий фильтр, бо
ужо задрали со службой этой троянской:)
Лучше так: snc+sobachechka+mail333+tochechka+com
DV> Данные в варианте могут занимать 8 байт.
Hу вот опять терминология... Что есть такое 'данные' в варианте? Если
это 'полезное' содержимое (в моем случае это байтовый массив), то он
вообще может быть пустой, или скажем с одним элементом. Если же речь
идет о структуре Variant, то вроде бы у нее размер определенный.
Правда, я так и не въехал что там такое union. Может быть он может
иметь разный размер (или это он в 8 байт может распухнуть)? Тогда как
объявлять эту VARIANT структуру?
--
Alexander
* Origin: Talk.Mail.Ru (2:5020/400)
Re: MSDN
From: "Igor Evgrafov" <fornews [@] systems21.ru>
Hello, Alexej! You wrote to All on Mon, 13 Oct 2003 22:28:06 +0400:
AB> Великий ALL, может у тебя есть свежий MSDN
Hу положим есть, апрельский. Hа DVD 1.8Гб занимает...
AB> или может ты знаешь где его можно скачать ?
А сидюки софтом у вас совсем не продают? Тогда сюда можно http://www.ozone.ru/context/detail/id/1456327/ у меня собственно оттуда.
With best regards, Igor Evgrafov. E-mail: ievgrafo<AT>systems21{DOT}ru
* Origin: Cronyx Plus ISP (2:5020/400)
Re: Byte Array(Variant) and API (Part 2)
From: "Dmitry Viazowkin" <vde [@] ufanet.ru>
> Лучше так: snc+sobachechka+mail333+tochechka+com
ОК.
> вообще может быть пустой, или скажем с одним элементом. Если же речь
> идет о структуре Variant, то вроде бы у нее размер определенный.
Именно.
> Правда, я так и не въехал что там такое union. Может быть он может
> иметь разный размер (или это он в 8 байт может распухнуть)? Тогда как
> объявлять эту VARIANT структуру?
Смотря для чего ;) Для работы с почти всем - хватает и 12 байт, но есть и
сложные случаи. Детально - есть в .h-файле с описанием структeры tagVARIANT.
--
With best regards
Dmitry Viazowkin
* Origin: Me? Organized??? (2:5020/400)
Firebird
||*()*|| Ах это вы, Ivan ? А я вас не узнал без санитара...
13 окт 03 года ты писал(а) к мне:
[...skipped...]
IK> 3 метpа дистpибутив.
mdac_typ.exe уже 7 метров. А рассчитывать на то, что у пользователя уже стоит поддержка ADO как то не очень корректно.
IK> Для полноценного сеpвеpа -- ноpмально. Если есть
IK> какие-то пpоблемы, юзай всякие mSQL, mySQL, tinySQL. :)
Спасибо. Попробую.
IK> Всё зависит от конкpетной задачи.
Привесить к программе БД поддерживающую SQL. У меня данные хранятся в файлах прямого доступа. Когда дело дошло до сложных запросов, то что в SQL можно вожить в одну строчку приходится описывать очень долго и при слегка вспухшей базу начинаются тормоза.
I'll be back, Ivan !
http://www.caligari.zp.ua - реальная психологическая и психиатрическая помощь. Анонимно. Пока бесплатно.
* Origin: Hе мошенничайте! Государство не любит конкурентов (2:4641/500.99)
дата создания файла из JPEG
Hello, All!
Вопрос такой - в JPEG хранится время создания файла - как его вытащить
программно?
Т.е. то время, что отображается в ACDSee в меню File->Properties, закладка
Metadata
Best regards и т.д, Hell ghostwind [@] mail.ru
* Origin: Меру-то мы знаем, но разве ее выпьешь? (2:452/50.136)
Re: Byte Array(Variant) and API (Part 2)
From: Alexander Trishin <trialFORSPAM [@] trishin.com>
Alexander Asyabrik wrote on Tue, 14 Oct 2003 08:19:23 +0000 (UTC):
> Во-вторых у меня v->vt != (VT_ARRAY | VT_UI1 | VT_BYREF)) и
> pvData содержит 0 (в чем и затык-то!)
А должно быть так, как я написал :)
Еще раз говорю, если передавать Variant в ATL Dll то С-ный код получает
все байты, ничего 0 не равно.
Передавлось собственно
Dim c As Variant
Dim c(3) As Byte
Почему у тебя 0 - я не знаю. Тебе всего навсего надо переделать работу с
указателями из куска С++ кода на CopyMemory в VB. Обратить внимание на
использование члена структуры pparray, а не parray.
> А в-третьих использование цикла, хоть и на этом продвинутом, но для
> меня иностранном, языке полностью не соответствует поставленной
> задаче. А задача была передать в апи функцию адрес данных массива
> _большого_ размера непосредственно, не создавая их копии в памяти, что
> должно уменьшить расход памяти и ускорить процесс.
Цикл это для наглядности. Самое главное в нем - это как получить адрес
первого элемента массива, который те передашь потом в стороннюю DLL.
Либо сделай тестовый проект и шли его мне. Делать все за тебя мне лень.
--
AT
* Origin: Demos online service (2:5020/400)
Re: Byte Array(Variant) and API (Part 2)
From: Alexander Trishin <trialFORSPAM [@] trishin.com>
Dmitry Viazowkin wrote on Tue, 14 Oct 2003 00:10:32 +0000 (UTC):
> компонент скорее всего нуждается в дополнительном парсинге получаемого
> значения - копируем полученные 14 байт в описанную у себя структуру tagVARIANT и
> ручками, ручками...
sizeof(VARIANT) есть 16, а не 14 байт.
--
AT
* Origin: Demos online service (2:5020/400)
Re: Byte Array(Variant) and API (Part 2)
From: "Igor Evgrafov" <fornews [@] systems21.ru>
Hello, Alexander! You wrote to Igor Evgrafov on Tue, 14 Oct 2003 12:38:06 +0000 (UTC):
IE>> AA> Если бы я был в состоянии написать ActiveX DLL на С++, я бы вас
IE>> AA> всех здесь не мучил дурацкими вопросами:)
IE>> А по моему гораздо проще недельку поразбиратся с ATL, чем
IE>> заниматься половыми извращениями на VB. У меня переписать свою
IE>> ActiveX dll c VB на С++ заняло около трех недель.
AA> Я горжусь тобой, Igor!
:))))) Спасибо!
AA> Так что там по поводу сабжа?
Чтоб не переписывать все я бы сделал маленькую DLL примерно такого содержания. Чисто пример.
В Vb
Повторять такое на VB никакого желания нет...
=========Beginning of the citation==============
STDMETHODIMP CTestVar::Test(VARIANT *vt)
{
SAFEARRAY *arr = NULL;
// если не массив выходим
if((vt->vt & VT_ARRAY) != VT_ARRAY) return S_OK;
// если по ссылке
if((vt->vt & VT_BYREF) == VT_BYREF)
{
// то так
arr = *(vt->pparray);
}
else
{
// иначе так
arr = vt->parray;
}
long nUBound,nLBound; // размерн
HRESULT hr;
// хотим только одномерный массив
UINT cDims = SafeArrayGetDim(arr);
if(cDims != 1) return S_OK;
// читаем размерности
hr = SafeArrayGetLBound(arr, 1, &nLBound);
if(FAILED(hr)) return S_OK;
hr = SafeArrayGetUBound(arr, 1, &nUBound);
if(FAILED(hr)) return S_OK;
UCHAR HUGEP *data; // указатель на массив байтов
// получаем адрес массива и увеличиваем счетчик блокировок
hr = SafeArrayAccessData(arr,(void HUGEP**)&data);
if(FAILED(hr)) return S_OK;
// как пример смотрим что там в первом элементе
UCHAR ch = data[0];
// <TODO> делаем с массивом что хотим :)
// заканчиваем работу с массивом уменьшаем счетчик
SafeArrayUnaccessData(arr);
return S_OK;
}
=========The end of the citation================
With best regards, Igor Evgrafov. E-mail: ievgrafo<AT>systems21{DOT}ru
* Origin: Cronyx Plus ISP (2:5020/400)
Re: Byte Array(Variant) and API (Part 2)
From: "Igor Evgrafov" <fornews [@] systems21.ru>
Hello, Alexander! You wrote to Igor Evgrafov on Tue, 14 Oct 2003 12:38:06 +0000 (UTC):
IE>> У меня переписать свою ActiveX dll c VB на С++ заняло около трех
IE>> недель.
AA> Я горжусь тобой, Igor!
Я это не для того чтоб выпендрится а чтоб показать, что не так уж и сложно некоторые части кода, которые геморойно (если вообще возможно) писать на VB сделать в С++. Там хоть отлаживаться спокойно можно в VB при таких извращениях либо работает либо Access Violation и что там глючит ХЗ.
PS: У тебя ж, насколько я понял, еще есть желание из сырого массива делать VBшный SAFEARRAY. Причем без копирования. Тут уж, ИМХО, на VB совсем труба будет...
With best regards, Igor Evgrafov. E-mail: ievgrafo<AT>systems21{DOT}ru
* Origin: Cronyx Plus ISP (2:5020/400)