Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> связка VB + VC++ 
:(
    Опции темы
Гость_george
Дата 19.7.2004, 11:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Написал библиотеку на C++, в ней функция в качестве параметров получает указатели на структуры, инициализируемые в VB.

Работало все хорошо, но как только удалил в проекте DLL и тестовом проекте одно лишнее поле, VB стал принимать от DLL обработанную "муру".

С чем, кроме моей невнимательности, это может быть связано, может необходимо какое-то выравнивание расположения структур на границе слова или что другое ?
  Вверх
Олег М
Дата 19.7.2004, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Покажи какие именно структуры и как работаешь с ними
PM MAIL ICQ   Вверх
Guest
Дата 19.7.2004, 13:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Объявление в C++:

struct LabelFormat
{
short ID;
unsigned char type;
char sName[20];
unsigned char Align;
unsigned char Font;
unsigned char isFramed;
unsigned char isShadowed;
unsigned char isTransparent;
unsigned char isVisible;
unsigned char isAlarmed;
short Left;
short Top;
short Width;
short Height;

//Type specific properties

short LinkedToChannel;
unsigned char Fraction;
unsigned char UpdatedFlag;
unsigned char AlarmType;
char sFilter[26];
char Delimiters[11];
char Marker[16];
unsigned char NumericFilter;
unsigned char MarkerHidden;
short WordOffset;
unsigned char ActivateLink;
char sMsgText[512];
rob_tm TimeStamp;
unsigned char UnreadFlag;
short TotalPoints;
double BaseValue;
char Formula[64];
unsigned char CompFormulaSize;
short DependencyDepth;
double LowerBoundary;
double HigherBoundary;
ChannelDataPoint Point[100];
};

Объявление в VB:
Type LabelFormat ' Length in bytes
ID As Integer '2
type As Byte '1
sName(19) As Byte '20
Align As Byte '1
Font As Byte '1
isFramed As Byte '1
isShadowed As Byte '1
isTransparent As Byte '1
isVisible As Byte '1
isAlarmed As Byte '1
Left As Integer '2
Top As Integer '2
Width As Integer '2
Height As Integer '2
'Type specific properties
LinkedToChannel As Integer '2
Fraction As Byte '1
UpdatedFlag As Byte '1
AlarmType As Byte '1
sFilter(25) As Byte '26
Delimiters(10) As Byte '11
Marker(15) As Byte '16
NumericFilter As Byte '1
MarkerHidden As Byte '1
WordOffset As Integer '2
ActivateLink As Byte '1
sMsgText(511) As Byte '512
TimeStamp As rob_tm '7
UnreadFlag As Byte '1
TotalPoints As Integer '2
BaseValue As Double '8
Formula(63) As Byte '64
CompFormulaSize As Byte '1
DependencyDepth As Integer '2
LowerBoundary As Double '8
HigherBoundary As Double '8
Point(99) As ChannelDataPoint '100 * 15
End Type

Инициализация:
Dim Label(511) As LabelFormat '16*32

Функция вызова из DLL:

определение
Declare Function PDB2Struct Lib "Dll_Cmblx" Alias "_PDB2Struct@28" (ByVal CBX_PDB_FileName As String, ByVal Channels_PDB_FileName As String, NumberOfLayouts As Integer, _
Layouts As LayoutFormat, ByRef Labels As LabelFormat, Graphs As GraphFormat, Channels As ChannelFormat) As Long

вызов:
er = PDB2Struct("C:\tsn\CbxDB.pdb", "C:\tsn\CbxChannelsDB.pdb", NumberOfLayouts, Layout(0), Label(0), Graph(0), Channel(0))

  Вверх
Олег М
Дата 19.7.2004, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



А что такое LayoutFormat и GraphFormat и др? Может в них дело, может их тоже по рефу надо передавать
PM MAIL ICQ   Вверх
Guest
Дата 19.7.2004, 14:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











естественно, просто другие структуры я здесь не отображал...
  Вверх
Олег М
Дата 20.7.2004, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
естественно,

Что естественно? Почему ты их тогда не передаёшь по ссылке?

PM MAIL ICQ   Вверх
Guest
Дата 20.7.2004, 15:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Цитата
естественно,

Что естественно? Почему ты их тогда не передаёшь по ссылке?

Да все я передаю... Я жалею просто ваши глаза и все вам не представляю.

Просто маленький эксперимент мне объясните.

Синхронно, в обеих проектах меняю поля местами, и все нафиг летит!

Читал в Inete обрывки фраз о том, что VB не следует формату упакованных данных в структуре.

Опишите, пожалуйста, по каким правилам с ним можно дружить .. (и касаемо структур в структуре)
  Вверх
Олег М
Дата 21.7.2004, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
Declare Function PDB2Struct Lib "Dll_Cmblx" Alias "_PDB2Struct@28" (ByVal CBX_PDB_FileName As String, ByVal Channels_PDB_FileName As String, NumberOfLayouts As Integer, _
Layouts As LayoutFormat, ByRef Labels As LabelFormat, Graphs As GraphFormat, Channels As ChannelFormat) As Long

Но заначения GraphFormat и ChannelFormat передаются по значению, а не по ссылке. По моему надо
Код
Declare Function PDB2Struct Lib "Dll_Cmblx" Alias "_PDB2Struct@28" (ByVal CBX_PDB_FileName As String, ByVal Channels_PDB_FileName As String, NumberOfLayouts As Integer, _
ByRef Layouts As LayoutFormat, ByRef Labels As LabelFormat,ByRef  Graphs As GraphFormat,ByRef Channels As ChannelFormat) As Long

или что-то типа того
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.