SuperMiQi Ответов: 1

Перенос массива целых чисел из сборки автоматизации c++ com в VB.NET приложение winform


Всем Привет,

Я стою перед тонкостями, связанными с переносом массива целых чисел из сборки автоматизации c++ com в vb.net приложение winform.

массив определяется в vb.net winform и значения инициализируются внутри метода Ole automation. Когда метод возвращается в основное приложение для отображения содержимого массива, определенные значения теряются. Кажется, в куче что-то идет не так.


Полный образец приложения доступен по следующей ссылке: arraybounding

В чем может быть причина моей проблемы?
Заранее большое вам спасибо.
С уважением.
Мики

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

попробовали через ссылку библиотеки типов или позднюю привязку, эффект тот же.

Вот сегмент кода, который я пытаюсь охватить:
Private _Layer As Object = Nothing
 Dim ArrValues(10) As Integer
 _Layer.Generate(ArrValues(LBound(ArrValues)), UBound(ArrValues

BOOL CLayer::Generate(long FAR* IntegersArray, long Items)
{
      for (long Index = 0; Index < Items; Index++)
      {
            IntegersArray[Index] = Index + 1;
      }
      return TRUE;
}

1 Ответов

Рейтинг:
1

KarstenK

Ваша главная проблема заключается в том, что целые числа в VB коротки в VC. Поэтому вам лучше использовать long as data type как это обсуждалось в этой статье форум codeguru с некоторыми ссылками.

Microsoft сделала отличный учебник за все это.


Richard Deeming

Целые числа в VB короткие в VC

- Вы уверены? Так было и с VB6, но когда VB.NET вышел, тот самый Integer тип был переопределен как 32-битное целое число.

SuperMiQi

Привет,
Я согласился с Ричардом, в VB.NET или C#,.., тип integer-это system. int32 (то есть 32 бита), который будет соответствовать длинному типу c++. Я исправил эту проблему, используя VARIANT для передачи моего массива integer, и это хорошо работает.
Спасибо.
С уважением.
Мики.