![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Гость_george |
|
|||
|
Unregistered |
Написал библиотеку на C++, в ней функция в качестве параметров получает указатели на структуры, инициализируемые в VB.
Работало все хорошо, но как только удалил в проекте DLL и тестовом проекте одно лишнее поле, VB стал принимать от DLL обработанную "муру". С чем, кроме моей невнимательности, это может быть связано, может необходимо какое-то выравнивание расположения структур на границе слова или что другое ? |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Покажи какие именно структуры и как работаешь с ними
|
|||
|
||||
| Guest |
|
|||
|
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)) |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А что такое LayoutFormat и GraphFormat и др? Может в них дело, может их тоже по рефу надо передавать
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
естественно, просто другие структуры я здесь не отображал...
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Что естественно? Почему ты их тогда не передаёшь по ссылке? |
|||
|
||||
| Guest |
|
||||
|
Unregistered |
Да все я передаю... Я жалею просто ваши глаза и все вам не представляю. Просто маленький эксперимент мне объясните. Синхронно, в обеих проектах меняю поля местами, и все нафиг летит! Читал в Inete обрывки фраз о том, что VB не следует формату упакованных данных в структуре. Опишите, пожалуйста, по каким правилам с ним можно дружить .. (и касаемо структур в структуре) |
||||
|
|||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Но заначения GraphFormat и ChannelFormat передаются по значению, а не по ссылке. По моему надо
или что-то типа того |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |