Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Передача структуры в dll Добавлено: 12.02.03 18:22  

Автор вопроса:  Alliancce

Имеется структура в 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;

}

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #1 Добавлено: 13.02.03 00:29

Может быть потому что в библиотеке одна из переменных в структуре у тебя обьявлена int а передаешь ты ей Long? Он то длиннее... Рарядность другая, мало ли что там в памяти замутилось. Что замутилось эт точно...

Ведь так у тебя и размер всей структуры меняется а соответственно и выделяемая под нее память...

Ответить

Номер ответа: 2
Автор ответа:
 Alliancce



Вопросов: 4
Ответов: 10
 Профиль | | #2 Добавлено: 13.02.03 14:11

int в С++ имеет тот же размер, что Long в ВБ, тут заморочка не в этом.

Ответить

Номер ответа: 3
Автор ответа:
 Goul



Вопросов: 0
Ответов: 29
 Профиль | | #3 Добавлено: 13.02.03 16:47

А нельзя строковые поля в структуре объявить фиксированной длины (соответственно, Field1 As String * LEN, char field1[LEN])? Так не должно быть проблем.

Вот заодно цитатка из Эпплмана:

Прежде чем передавать строку в качестве параметра, необходимо выделить её с максимальной используемой длиной.

Ответить

Номер ответа: 4
Автор ответа:
 Alliancce



Вопросов: 4
Ответов: 10
 Профиль | | #4 Добавлено: 14.02.03 17:41

Точно, все нашел.

1. Строки указывать фиксированной длинны.

2. в ф-цю из dll написанную на с++ передовать только указатель ( func(struct*) ),

по значению не проходит.

А я 2 дня бился, хотел уже на другой компилятор переходить.

Спасибо всем за наводящие мысли.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам