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

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

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

Visual Basic 6.0 - Help


Re: Help

Я ВАС приветствую Dmitriy!

11 Окт 03 13:21, Dmitriy Kozyrev -> Roman Spotar:



RS>> Run-time '429':

RS>> ActiveX component can't create object.


DK> [здесь ничего и не было]


RS>> И ещё одна библиотека под названием MC145170.dll а также программа


DK> для


DK> [здесь ничего и не было]


DK> Попробуй выполнить

DK> regsvr32 MC145170.dll


Hе помогло всё так и осталось.


С уважением, Роман Спотарь.
Home 380-6242-39915 (15:30-21:00)

* Origin: Зажигалка Zippo огнетушитель UnZippo (2:4653/10.5)

Re: Firebird

Hello Alexander.

13 Окт 03 18:20, you wrote to me:
AB> Ах, разочаровался я и в Firebird. С ним тоже дистрибутив

AB> безобразно распухает.


3 метpа дистpибутив. Для полноценного сеpвеpа -- ноpмально. Если есть какие-то пpоблемы, юзай всякие mSQL, mySQL, tinySQL. :)

Всё зависит от конкpетной задачи.

Ivan

* Origin: Ухэр татац харвах бабах...(с)"Правда Илбэча" (2:5023/19.9)

MSDN

From: "Alexej Bobylev" <alex171069 [@] udmnet.ru>


1528063497

HI !
Великий ALL, может у тебя есть свежий MSDN или может ты знаешь где его
можно скачать ?
* Origin: format (2:5050/5050)

БД

i #|П| |Р |И| |В |Е +#, *All* !
Hа удалённом компе находится база данных, как можно её подключить к пpиложению
(логин и паpоль на доступ нужно вводить тоже в пpиложении)???

#\W/ |i| + |H| |B |E |S + \W/ |i| |S |H| |E |S#, *(О) /л\ |Е |г*
_сейчас_ *14 октябpя 03 г. ::: 00:46* :.:.:...
*[soft-best.net][beer]* e-mAil: _HiTman [@] soft-best.net_;
_oleg-yurchenko [@] yandex.ru_ ICQ: _170340841_
* Origin: ::: Ce n'est pas comme il faut! ::: (2:5081/5.3)

Вопрос

||*()*|| Ах это вы, Mihail ? А я вас не узнал без санитара...

13 окт 03 года ты писал(а) к All:

[...skipped...]

MB> Как создать новую директорию в той же папке где установлена программа?


MkDir App.Path & "\Hовая папка"

I'll be back, Mihail !
http://www.caligari.zp.ua - реальная психологическая и психиатрическая помощь. Анонимно. Пока бесплатно.

* Origin: Hе мошенничайте! Государство не любит конкурентов (2:4641/500.99)

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

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Master.

Вы, было дело, писали 13 октября 2003 г., 20:27:


AA>> Public Sub WriteBytes(bBuffer As Variant)


DK> В общем, я разобрался.

DK> Череда указателей: OleVariant -> DWORD -> SAFEARRAY -> массив.


DK> Sub a(v)

DK> Dim ov As OLEVARIANT

DK> Dim sa As SAFEARRAY

DK> Dim l As Long

DK> Dim b As Byte


DK> CopyMemory ov, v, Len(ov)

DK> CopyMemory l, ByVal ov.dwData, 4

DK> CopyMemory sa, ByVal l, Len(sa)


Так вот при передаче обычного байтового массива здесь череда-то у меня
и обрывается: sa.pvData не содержит валидного указателя!!! Там
оказывается 0. Я же об этом сразу сказал, кажется.

DK> CopyMemory b, ByVal sa.pvData, 1

DK> MsgBox b


Так что у меня всегда в мессадже 0, какой бы ни был первый байт
массива.


Может это глюк какой? Тогда странно, почему сразу на обоих моих компах
и на VB5 и VB6 одновременно. Или может какая специфика из-за того, что
это все в модуле класса?

Лирическое отступление:
Смотрю на чужие постинги и думаю себе: нормальные люди задают
нормальные вопросы типа как программно создать директорию или кнопку
на форме, где скачать MSDN:), а от меня вечно исходит какая-то
бредятина. Аж неудобно мне как-то...


--
С уважением, Alexander
11:08:07 PM
* Origin: Talk.Mail.Ru (2:5020/400)

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

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, A.Skrobov.

Вы, было дело, писали 13 октября 2003 г., 19:45:


AS>>> В этом случае третий DWORD варианта указывает не на SAFEARRAY, а

AS>>> как раз на первый байт массива.

AA>> Дык пробовал я. Hепохоже на правду: "...недопустимая операция".

AS> А мне удавалось, как раз сегодня утром. Хорошо проверял?


А что ж там можно сделать плохо? Функция-то работающая, просто указатель
ей другой передаю и все.

AA>> Когда передается массив в варианте, то маска поля vt определяется как

AA>> vt_ui1 or vt_array


AS> То же значение можно получить ф-ей VarType.


Можно, но в обоих случаях возвращается 8205. Я толком не знаю, что
есть VT_BYREF, но VB его игнорирует. Для VarType вообще такой
константы непредусмотрено.

AA>> Где данные-то искать?

AS> А ты просто посмотри на все поля варианта, авось в каком-то нужный адрес лежит.


В первом 16-битном поле лежит тип варианта. Потом три 16-битных
пустых (0), ну и в последнем Dword-e некое значение. Использование его, как
указатель для записи в файл вешает VB. Если это указатель на какую-то
структуру, то на какую?


AA>> Может мне вот это нужно?

AA>> The VariantChangeType function


AS> Я ожидаю, что можно сделать и 'обычно', без АПИ. Где-то данные ведь должны лежать.


Дык, знамо дело, должны. Только как определить это место?


--
С уважением, Alexander
8:37:16 PM
* Origin: Talk.Mail.Ru (2:5020/400)

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

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


Alexander Asyabrik wrote on Sun, 12 Oct 2003 21:32:54 +0000 (UTC):

> Может, что подскажешь в обход проблемы? Как в этом случае получить

> указатель на массив?


Я конечно пропустил Part 1, но почему бы просто не передавать VarPtr,
размер одного элемента массива и количество элементов?

--
AT
* Origin: Demos online service (2:5020/400)

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

From: Alexander Asyabrik <belmis [@] mail.belpak.by>


Привет, Alexander.

Вы, было дело, писали 14 октября 2003 г., 1:33:


AA >> Как в этом случае получить указатель на массив?


AT> Я конечно пропустил Part 1, но почему бы просто не передавать VarPtr,

AT> размер одного элемента массива и количество элементов?


Пропустив, не много потерял, я думаю:) Hо это заметно.

1) В моем случае VarPtr указывает совсем не на массив, а на структуру,
описывающую переменную типа Variant
2) Размер одного элемента всегда 1 байт (только байтовый массив)
3) Зачем АПИ функции количество элементов, если ей не объяснили где
расположен первый?:) BTW АПИ функции фиолетово размер и количество
элементов передаваемого массива, ей подавай конечное число _байтов_
Такие вот дела.

--
С уважением, Alexander
12:36:53 AM
* Origin: Talk.Mail.Ru (2:5020/400)

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

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


Alexander Asyabrik wrote on Mon, 13 Oct 2003 21:50:32 +0000 (UTC):

> AT> Я конечно пропустил Part 1, но почему бы просто не передавать VarPtr,

> AT> размер одного элемента массива и количество элементов?

>

> Пропустив, не много потерял, я думаю:) Hо это заметно.


Так "не много", или "заметно" ? :)


> 1) В моем случае VarPtr указывает совсем не на массив, а на структуру,

> описывающую переменную типа Variant


VarPtr никуда не указывает. Она возвращает адрес. Если у тебя переменная -
Variant, то будет адрес структуры VARIANT.

> 2) Размер одного элемента всегда 1 байт (только байтовый массив)


Тогда размер одного элемента не нужен.


> 3) Зачем АПИ функции количество элементов, если ей не объяснили где

> расположен первый?:) BTW АПИ функции фиолетово размер и количество

> элементов передаваемого массива, ей подавай конечное число _байтов_


Число байт тоже не нужно. Если я правильно понял нужно это:
VB code:
Dim c As Variant
ReDim c(3) As Byte
c(0) = &H1
c(1) = &H2
c(2) = &H3
c(3) = &H4
WriteBytes VarPtr(c), UBound(c) + 1 ' второй параметр на самом деле
' нафиг не нужен

C++ DLL function:
int WINAPI WriteBytes(int buf, int size)
{
VARIANT* v = static_cast<VARIANT*>((void*) buf);

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

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

BYTE *data = static_cast<BYTE*>((void*) sf->pvData);

for (int i = 0; i < sf->rgsabound[0].cElements; i++)

{
BYTE b = data[i];
// do something with BYTE
}
return 0;
}


--
AT
* Origin: Demos online service (2:5020/400)