Я работаю над небольшим 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
Ой!