Страница: 1 |
Имеется структура в VB Type ST Field1 As String Field2 As Long Field3 As String Field4 As String End Type написал dll на VC++, где в функцию передается эта структура call func(sss as ST) данная функция вызывается, отрабатывает но потом VB экзешник валится. И значения в структуре переданные в функцию полная лабуда, что может быть?? Причем если переписать dll-ную функцию, и передавать параметры по отдельности (func(field1,field2 итд)),то все происходит нормально. Реализация структуры на С++ - struct ST { char* Field1; int Field2; char* Field3; char* Field4; }
Может быть потому что в библиотеке одна из переменных в структуре у тебя обьявлена int а передаешь ты ей Long? Он то длиннее... Рарядность другая, мало ли что там в памяти замутилось. Что замутилось эт точно... Ведь так у тебя и размер всей структуры меняется а соответственно и выделяемая под нее память... int в С++ имеет тот же размер, что Long в ВБ, тут заморочка не в этом. А нельзя строковые поля в структуре объявить фиксированной длины (соответственно, Field1 As String * LEN, char field1[LEN])? Так не должно быть проблем. Вот заодно цитатка из Эпплмана: Прежде чем передавать строку в качестве параметра, необходимо выделить её с максимальной используемой длиной. Точно, все нашел. 1. Строки указывать фиксированной длинны. 2. в ф-цю из dll написанную на с++ передовать только указатель ( func(struct*) ), по значению не проходит. А я 2 дня бился, хотел уже на другой компилятор переходить. Спасибо всем за наводящие мысли. Страница: 1 |
Вопрос: Передача структуры в dll
Добавлено: 12.02.03 18:22
Автор вопроса: Alliancce
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #1
Добавлено: 13.02.03 00:29
Номер ответа: 2
Автор ответа:
Alliancce
Вопросов: 4
Ответов: 10
Профиль | | #2
Добавлено: 13.02.03 14:11
Номер ответа: 3
Автор ответа:
Goul
Вопросов: 0
Ответов: 29
Профиль | | #3
Добавлено: 13.02.03 16:47
Номер ответа: 4
Автор ответа:
Alliancce
Вопросов: 4
Ответов: 10
Профиль | | #4
Добавлено: 14.02.03 17:41