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

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

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

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

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


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

From: Alexander Asyabrik

Привет, 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

Привет, 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"

Hello, Alexej! You wrote to All on Mon, 13 Oct 2003 22:28:06 +0400:

AB> Великий ALL, может у тебя есть свежий MSDN
Hу положим есть, апрельский. Hа DVD 1.8Гб занимает...

AB> или может ты знаешь где его можно скачать ?
А сидюки софтом у вас совсем не продают? Тогда сюда можно www.ozone.ru/context/detail/id/1456327/ у меня собственно оттуда.

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


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

From: "Dmitry Viazowkin"

> Лучше так: 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 !
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

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

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"

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];
// делаем с массивом что хотим :)
// заканчиваем работу с массивом уменьшаем счетчик
SafeArrayUnaccessData(arr);

return S_OK;
}
=========The end of the citation================

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


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

From: "Igor Evgrafov"

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: ievgrafosystems21{DOT}ru
* Origin: Cronyx Plus ISP (2:5020/400)



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




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