Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как передать массив строк в VB?


Автор: dead_ricky 12.7.2004, 14:56
Как передать массив строк в VB?

Есть такой код сервера (С++):

Код
STDMETHODIMP CSomeManObj::EnumSome(VARIANT* psaSome)
{
VARIANT         theArray;
SAFEARRAY*      pSA;
SAFEARRAYBOUND  bound[1];
CComBSTR        bstrSomes[2] = {L"Element number 1", L"Element number 2"};

bound[0].lLbound    = 0;
bound[0].cElements  = 2;
pSA = SafeArrayCreate(VT_BSTR, 1, bound);
for (int i = 0; i < 2; i++)
 SafeArrayPutElement(pSA, (LONG*)&i, bstrSome[i]);
VariantInit(&theArray);
theArray.vt  = VT_DISPATCH | VT_BYREF;
theArray.parray = pSA;
VariantCopy(psaSome, &theArray);

return S_OK;
}


и такой код клиента (VB):

Код

Sub GetSomes()
   Dim Somes(0 To 1) As String
   Dim o As New SomeManObj
   o.EnumSome (Somes)
   MsgBox Somes(1)
End Sub


Подскажите плз что тут не так , и как надо правильно.
Заранне благодарен.

Автор: Fantasist 13.7.2004, 17:52
Код сервера твой? Покажи тогда и IDL этого метода. Как я понимаю, подразумевается, что psaSome - это retval. Я просто Basic не знаю, я только помню, что там все на variant'ах. Поэтому я бы попробывал так:

Код

Sub GetSomes()
  Dim o As New SomeManObj
  Somes  = o.EnumSome()
  MsgBox Somes(1)
End Sub


Только не знаю, как Somes в VB правильно определить.

Автор: DrinkinS 14.1.2006, 15:07
у меня така беда. Я за ранне не знаю какое количество элементов будет в строке. Как изменить размер массива на единицу больше без потери инфы. ПЛИЗ !
smile

Автор: cardinal 14.1.2006, 16:29
Пожалуйста, один топик - один вопрос.
Правила форума: http://forum.vingrad.ru/index.php?s=&act=SR&f=27

Автор: darkart 14.1.2006, 19:45
Цитата

у меня така беда. Я за ранне не знаю какое количество элементов будет в строке. Как изменить размер массива на единицу больше без потери инфы. ПЛИЗ !

Не знаю что ты хотел, но посмотри ReDim с Preserve
Пример:
Код

  Dim iLen As Integer
  iLen = 10
  ReDim iArr(iLen) As Integer
  iArr(1) = 1
  iLen = iLen + 1
  ReDim Preserve iArr(iLen)
  MsgBox iArr(1)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)