Страницы: 1
RSS
Передать двумерный массив Variant из VBA в dll C++, ...и вернуть их после обработки обратно в VBA.
 
Подскажите, пожалуйста, можно ли передать данные Excel VBA в виде двумерного массива типа Variant в функцию написанную в dll C++ и вернуть данные обратно в VBA после обработки. И если - да, то можно ли привести примерчик, как это реализовать? Заранее спасибо всем откликнувшимся!
 
Доброе время суток
Цитата
poltorax написал:
можно ли передать данные
Можно
Цитата
poltorax написал:
можно ли привести примерчик
Так вроде есть на просторах. (Не вчитывался, уж больно специфично).
 
В принципе, тут больше вопрос именно по С++, т.к. он более требователен к типам данных.
Главное здесь, это при передачи аргумента проверять, является ли он массивом именно двухмерным(и вообще массивом). Иначе С не примет его и ошибка скорее всего будет уже на стадии вызова функции.
А передаете по правилам VBA, через вызов функции:
Код
Dim MyArr(), res
ReDim MyArr(1 to 10, 1 to 2)
'допустим заполняем чем-то
'теперь вызываем функцию DLL с назначением в качестве результата нового массива, но уже обработанного функцией С
res = FuncName(MyArr)
примерно как-то так
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо
 
Как вы описывали функцию, тип аргумента
Код
Public Declare Function FuncName Lib "mydll.dll" (ByRef MyArr as ???)
 
Роман3101, можно объявить As Variant, тогда можно передавать что угодно, за исключением пользовательских типов.
Тогда задача dll - разобраться в структуре переданного Variant.
https://rsdn.org/article/com/varsafearr.xml
 
Можно написать не процедурную dll, а СОМ.dll. Это несколько сложнее, зато SAFEARRAY  и VARIANT это элемент dual-интерфейсов и интерфейсов, помеченных атрибутом oleautomation. Родные структуры для VB, и возможностью использовать в любых программах с поддержкой СОМ. Подключение и использование для пользователя выглядит следующим образом: раз и два
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Наверх