MTeefy Ответов: 1

Проходя мимо а VB.NET структура со строкой фиксированной длины в структуру C++


Привет,

Мы преобразуем графическое приложение VB6 GUI, которое использует C++ для своего бэкенда, в VB.net передний конец. Мы также используем C++/CLI в качестве интерфейса.

In the C++ the original code was passed from VB6 as 

Public Type Npat_Stat
  Chan As Byte
  Con_stat As Byte
  Con_req As Byte
  Cur_serv As Byte
  Num_servs As Byte
  Server_id As String * 33
  Last_Error As String * 51
  Extra_error As String * 51
End Type


Где в подпрограмме C++ был передан следующий параметр:

STDAPI_(short) Npat_Status(struct com_status *cs)


struct com_status
{
   unsigned char chan;          // Set channel 0=temp, 1=perm1, 2=perm2
   unsigned char con_stat;      // Connection status
   unsigned char con_req;       // Connection control byte
   unsigned char cur_serv;      // Which server is being tried
   unsigned char num_servs;     // Number of servers to try
   char server_id[33];          // Server details
   char last_error[51];         // Last error text
   char extra_error[51];        // Extended error info
};




Так что в VB.net у меня есть:

Public Structure Npat_Stat
        Public Chan As Byte
        Public Con_stat As Byte
        Public Con_req As Byte
        Public Cur_serv As Byte
        Public Num_servs As Byte
        <VBFixedString(33)> Public Server_id As String
        <VBFixedString(51)> Public Last_Error As String
        <VBFixedString(51)> Public Extra_error As String
    End Structure


Поэтому я изо всех сил пытаюсь понять, как лучше всего подойти к этой проблеме. Я могу создать класс ссылки, чтобы держать структуру и передать ее от VB.net как следующие:

int Comms::O_Status(O_Stat ^cs)


а затем каким-то образом преобразовать ^cs, переданный в com_status *cs, чтобы перейти на исходную процедуру из этого интерфейсного слоя?

Будет ли строка фиксированной длины также вызывать проблемы?

Любые указатели на лучший способ сделать это было бы здорово, так как я новичок в C++, был на курсе и попросил помочь в этой части проекта, но я VB6/VB.Net bod, а не C++

Спасибо
Мартин

Что я уже пробовал:

Чтение онлайн-статей MS C++/CLI для получения примеров

1 Ответов

Рейтинг:
1

KarstenK

Это сложный вопрос, и лучше всего это сделать чтобы избежать подводных камней например, неправильно обращаться со строками. Они возникают потому, что VB 6-это какой-то устаревший язык, и поэтому с ним нужно обращаться очень осторожно. И еще: VB.net работает совершенно по-другому, немного больше похоже на C#.

Я помню, что использовал такие BSTR и Variant в C++ чтобы иметь дело с VB6 несколько лет назад, но сегодня я бы использовал фиксированный массив символов.

Этот вопрос тоже был задан. ответили здесь через меня.

Вы должны попробовать это. Пожалуйста, напишите об этом статью, Когда закончите или хотя бы добавьте сюда какой-нибудь комментарий.


Maciej Los

5ed!