|
|
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
Необходимо из C++ проги вызвать функцию, которая находится в VB'шной dll. Прототип этой функции (в терминах С++) таков: void VBfoo(char* strData); При вызове VBfoo параметр strData указывает на некий буфер, содержащий null-terminated строку. Проблемы: а) как описать эту функцию на VB; б) как переданные данные через strData переделать к типу VB String. Почитамши форум уже понял, что надо рассматривать даный параметр как массив байт и копировать посимвольно в VB-строку до первого нуля. Беда, однако, в полном отсутсвии знаний у меня синтаксиса VB, из-за чего не могу нацарапать декларацию данной функции на VB. А мне надо пример написать для пользователей VB... Я честно искал по форуму и тынтету. Но мне попадались только "обратные случаи", когда в VB выделается буфер и уже он заполняется внешней функцией. Подскажите, плиз, кто синтаксис VB знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 18:13 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
Sergey KasatkinПри вызове VBfoo параметр strData указывает на некий буфер, содержащий null-terminated строку.Не существует null-terminated строк. Это такой же нонсенс как край земли с которого путешественники падают. В Си и С++ строки называются zero-terminated. Sergey Kasatkinа) как описать эту функцию на VB; Код: plaintext Sergey Kasatkinб) как переданные данные через strData переделать к типу VB String. Не нужно. Они и так одинаковые. Sergey KasatkinЯ честно искал по форуму и тынтету. Но мне попадались только "обратные случаи", когда в VB выделается буфер и уже он заполняется внешней функцией.Потому что "обратные" случаи имеют больше смысла :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 18:29 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
White OwlНе существует null-terminated строк. Это такой же нонсенс как край земли с которого путешественники падают. Надо в MS про это написать. А то позорятся своим MSDN на весь мир, аж стыдно за них. White Owl Код: plaintext Терзают меня смутные сомнения, признаться, но попробую. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2008, 18:46 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
Sergey Kasatkin White Owl Код: plaintext Терзают меня смутные сомнения, признаться, но попробую. Спасибо. Зря терзают. Только в терминах VB Sub - это процедура, а не функция, так как не возвращает значения. А ByRef означает что в качестве параметра передается указатель (не null-terminated!) - обрезать строку ее по null придется Вам. Для большего понимания попробуйте разобраться как это дело работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 11:48 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
Sergey Kasatkin, DLL, создаваемые (коробочным) VB (4-6), являются ActiveX DLL. Это значит, что в DLL не будет точки входа VBfoo, адрес которой можно получить через GetProcAddress(). Процедура VBfoo должна являться Public методом класса с соответствующим Instancing - PublicNotCreatable, MultiUse, или GlobalMultiUse. Т.е. в программе на C++ придётся создавать экземпляр COM-объекта (VB-шного класса), и обращаться к его методам. Для этого надо пропустить .DLL через OleView.exe и получить .IDL, который можно подключить к своему C++ проекту. Откомпилировав .IDL, получаем .h и .c, которые тоже используем в проекте. void VBfoo(char* strData) можно описать на VB как Public Sub VBfoo(ByVal strData As Long), а преобразование в String выполнить примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 13:15 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
БенедиктSergey Kasatkin, DLL, создаваемые (коробочным) VB (4-6), являются ActiveX DLL. Спасибо за это уточнение, но то, что я написал вначале - не совсем соответствует действительности в смысле построения приложения, уж звиняйте. Просто так объяснить было проще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 14:27 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
Бенедикта преобразование в String выполнить примерно так А нафига преобразовывать, когда ByRef s as String - объявляет параметр как указатель на строку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 17:28 |
|
||
|
Получить внутри VB функции строку из null-terminated строки
|
|||
|---|---|---|---|
|
#18+
AndrFА нафига преобразовывать, когда ByRef s as String - объявляет параметр как указатель на строку... На какую строку, осмелюсь спросить? На BSRT, верно? А передается-то что? Ферштейн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2008, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35132541&tid=2162701]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 345ms |

| 0 / 0 |
