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

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

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

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

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


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"

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 !
www.caligari.zp.ua - реальная психологическая и психиатрическая помощь. Анонимно. Пока бесплатно.

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


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

From: Alexander Asyabrik

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

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

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

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

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((void*) buf);
if ( v->vt != (VT_ARRAY | VT_UI1)) return 0;
SAFEARRAY *sf = static_cast((void *)v->pparray);
BYTE *data = static_cast((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)



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




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