Сейчас на форуме: bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Вызов функции VB по адресу из Си
Посл.ответ Сообщение

Ранг: 45.7 (посетитель), 5thx
Активность: 0.020
Статус: Участник

Создано: 14 марта 2006 15:40 · Поправил: Fallout
· Личное сообщение · #1

Вот сталкнулся с такой проблемой не пойму в чем дело.... прсото сума схожу.... уже не понимаю.. крашиться Вб и все тут... причем параметр передаеться в функцию тоже не верный....

Си:

typedef void* __stdcall _vbsqlite_callback();

unsigned int __stdcall TryCallBack(unsigned int addr){
_vbsqlite_callback *__vbsqlite_callback = (_vbsqlite_callback*)addr;
__vbsqlite_callback( 666 );
}


Вб:

Public Function Bla(ByVal a As Long)
MsgBox a
End Function

TryCallBack AddressOf Bla


Функция то вызываеться.... но параметр передаеться не верный верней функция в вб ... его не правильно берет из стека вообщем месейдж бокс выдает вообще кривое значение.... после этого программа на вб падает и все тут...

п.с: есть же АПи которые колбек используют там все нормально не знаю какая разница то... кашмар



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 14 марта 2006 16:08
· Личное сообщение · #2

я не знаю какое соглашение о вызовах у VB, но похоже дело в нем



Ранг: 45.7 (посетитель), 5thx
Активность: 0.020
Статус: Участник

Создано: 14 марта 2006 16:12
· Личное сообщение · #3

там STDCALL как нистранно но ведь стандартный АПИ функциии виндовс... которые используют CALLBACK ... работают без ошибок... например таже EnumWindows



Ранг: 45.7 (посетитель), 5thx
Активность: 0.020
Статус: Участник

Создано: 14 марта 2006 16:17
· Личное сообщение · #4

Мда .. чуть не застрелился из ЗА СВОЕЙ ЖЕ ОШИБКИ...

Public Function Bla(ByVal a As Long)

эо же функция а я не указал что она возвращает

Public Function Bla(ByVal a As Long) As Long

=)

кашмар счас только обратил внимание.... теперь не падает извеняюсь ... за невнимательность.. и почему компилятор не ругнулся.... сатонинский язык этот VB




Ранг: 631.1 (!), 62thx
Активность: 0.370.01
Статус: Участник
Автор VB Decompiler

Создано: 14 марта 2006 18:46
· Личное сообщение · #5

Fallout пишет:
и почему компилятор не ругнулся

Потому что в VB функция не обязана что либо возвращать. Если тип возвращаемых данных не указан то можно либо ничего не возвращать, либо возвращать Variant

-----
Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе!




Ранг: 45.7 (посетитель), 5thx
Активность: 0.020
Статус: Участник

Создано: 14 марта 2006 20:20
· Личное сообщение · #6

Хм ну скорее всего "вариант" .... так как для ничего есть же SUB ... то бишь подпрограмма.... а вот как раз если возвращает Variant то там видемо как то хитро сделано...


 eXeL@B —› Программирование —› Вызов функции VB по адресу из Си
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати