Управление объектами VBA с помощью библиотеки классов C # (DLL) - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над небольшим POC, где я создал библиотеку классов C # (DLL), которую я хочу использовать в Excel, чтобы получить некоторые данные, которые мне понадобятся в рабочей книге. Поскольку я впервые создавал DLL, я следовал этому руководству . В настоящее время я ищу способ вернуть Object или что-то вроде String [] из DLL в мой сценарий VBA. Я могу работать с примитивными типами, такими как integer, string и boolean, поступающими из кода DLL в моем VBA, однако мне нужно что-то более сложное. В идеале я хотел бы иметь возможность возвращать и использовать любые Object из DLL, но String[] также может быть достаточно. Это именно то, что мне нужно - мне нужен способ передавать / возвращать более сложные типы данных ч / б мой код VBA и DLL. Согласно этой записи , это может быть не совсем возможным, но в качестве альтернативы OP удалось манипулировать объектами VBA с помощью своей DLL, передавая их по ссылке. Я хочу достичь того же, но их подход не работает для меня. Я продолжаю получать ошибку во время выполнения 453. К сожалению, у меня заканчиваются идеи относительно того, как я могу это исправить, поэтому я решил обратиться за некоторыми советами. Я был бы очень признателен, если бы вы могли помочь мне в решении этой проблемы. Если есть способ использовать объекты, возвращенные классом DLL в VBA, пожалуйста, просветите меня!

Вот мой код:

DLL (C #)

namespace ClassLibraryCSharp
{
  public class BW
  {
     public void getStrArray(ref object ar)
     {
        ar = new String[] { "test string" , "str2"};
        return (string[]) ar;
     }
   }
}

VBA

Dim clib As New ClassLibraryCSharp.BW

'Public Declare PtrSafe Function getStrArray Lib 
"C:\Users\...\bin\x86\Debug\ClassLibraryCSharp.dll" (ByRef ar)


Sub executeFM()

  Dim str(2) As String
  str(0) = "str1"
  str(1) = "str2"
  clib.getStrArray (str)
  'getStrArray (str) this line results in error 453 - Can't find DLL entry 
  point getStrArray (using the function declaration of course)
  Debug.Print str(0) 'output is always "str1" => array wasn't manipulated 
  by the DLL code

 End Sub

Ой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...