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

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

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

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)