Как передать массив (по ссылке, в VB6) в подпрограмму C \ C ++ * .dll? - PullRequest
3 голосов
/ 27 октября 2010

Мне нужно передать пустой массив вариантов в библиотеку DLL, написанную на C (и доступную во всех версиях Windows), а код C (который я не могу контролировать и не могу редактировать) заполнит пустой массив вариантовнекоторые возвращаемые значения.

По сути, когда я пытаюсь это сделать, массив ByRef всегда пуст, когда он должен содержать результаты вызова функции / sub (если я делаю то же самое в .NET, он работает).

Я думаю, мне нужно сделать пользовательское объявление, чтобы VB знал, как вызывать функцию C, или?

Вот как объявляется подпрограмма / функция C.Учитывая это, что мне нужно сделать, чтобы C мог правильно использовать мой пустой массив и получать результаты обратно?

HRESULT InvokeAction(
  [in]       BSTR bstrActionName,
  [in]       VARIANT varInActionArgs,
  [in, out]  VARIANT *pvarOutActionArgs,
  [in, out]  VARIANT *pvarRetVal
);

Подробнее об этой функции: http://msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx

Спасибо

1 Ответ

3 голосов
/ 27 октября 2010

С http://msdn.microsoft.com/en-us/library/aa381230(VS.85).aspx:

Dim returnVal
Dim outArgs(1)
Dim args(1)
args(0) = 3
returnVal = service.InvokeAction("GetTrackInfo", args, outArgs)
'return Val now contains the track length
'and outArgs(0) contains the track title
Dim emptyArgs(0)
returnVal = service.InvokeAction("Play", emptyArgs, emptyArgs)
'returnVal indicates if the action was successful

То, как вы получаете и пример обслуживания, не ясно из этого примера.

...