грабли с DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
valk
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 11.02.2002 (Пн) 18:09
Откуда: Ukraine

грабли с DLL

Сообщение valk » 05.03.2005 (Сб) 13:30

Подскажите, пожалуйста, есть ли какой способ передать из DLL на C++ структуру типа

type mystruct
a as String
b as String
end type

Просто строку отдатвать умею, а вот как быть со структурой?

Заранее спасибо за ответы
valk

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.03.2005 (Сб) 13:32

Способ есть. Со стороны Си это должно быть примерно
Код: Выделить всё
struct {
char* a;
char* b;
}
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.03.2005 (Сб) 13:37

Угу...
Только с массивом таких структур будет уже проблема :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

valk
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 11.02.2002 (Пн) 18:09
Откуда: Ukraine

Сообщение valk » 05.03.2005 (Сб) 13:38

Код:

struct {
char* a;
char* b;
}

И что?

VB не позволяет передавать юзерский тип данных ByVal, а если как ссылку, то даже используя в C ccылку на структуру заполнить строку не получается, т.к. String в VB <> char*

Или я что-то не понял?
valk

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: грабли с DLL

Сообщение codemaster » 05.03.2005 (Сб) 13:57

valk писал(а):Подскажите, пожалуйста, есть ли какой способ передать из DLL на C++ структуру типа

type mystruct
a as String
b as String
end type

Просто строку отдатвать умею, а вот как быть со структурой?

Заранее спасибо за ответы


как у тебя описана структура в C ++ ?
//<-
Mit freundlichen Grüßen
//->

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 05.03.2005 (Сб) 15:07

struct {
char* a;
char* b;
}

Не будет так работать. Точнее структура не нарушится, а вот переменные a и b не не будут на строку указывать.
Я обычно в си long'ами VB'шные String'и затыкаю, чтобы размер типа данных сохранить. А если нужно стрингу менять, то нужно изучать как VB String'и хранит. У меня до этого руки не дошли. Только массивы разобрал...
Программисты не глючат - глючат компиляторы...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.03.2005 (Сб) 15:17

Будет работать именно так.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.03.2005 (Сб) 15:21

valk писал(а):VB не позволяет передавать юзерский тип данных ByVal, а если как ссылку, то даже используя в C ccылку на структуру заполнить строку не получается, т.к. String в VB <> char*

Или я что-то не понял?

Хотя String в VB <> char*, но VB при вызове внешних функций преобразует все свои строки к char*, а потом (восле возврата из функции) - обратно в BSTR.
Т.е. именно так работать и будет.

CodeName33, тебе пример намылить, или так поверишь? ;-)
Изображение

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 05.03.2005 (Сб) 16:01

tyomitch, Это если передавать переменную пользовательского типа или 1 элемент массива, то ВБ (поверю на слово) сделает такое преобразование. А вот если нужно передать и обработать массив ползовательского типа и указатель взят вручную из SAFEARRAY (т.к. при передаче первого элемента A(0) пользовательского типа во внешнюю функцию со всем массивом работать будет нельзя), то тут уже никакого преобразования не будет...
Программисты не глючат - глючат компиляторы...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.03.2005 (Сб) 16:09

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 160

    TopList