我正在一个小型POC上工作,在那里我创建了一个C#类库(DLL),我想在Excel中使用该库来获取工作簿中需要的一些数据。因为这是我第一次创建DLL,所以我遵循了this guide。我目前正在寻找的是一种从DLL返回Object
或类似String []
之类的方式到我的VBA脚本的方法。我能够处理来自VBA中DLL代码的原始类型,例如integer
,string
和boolean
,但是我需要更复杂的东西。理想情况下,我希望能够从DLL返回并使用任何Object
,但是String[]
也足够。这正是我所追求的-我需要一种方法来通过/返回我的VBA和DLL代码更复杂的数据类型。根据{{3}},这可能不是完全可能的,但是作为一种选择,OP通过引用传递对象来设法用其DLL操作VBA对象。我想实现同样的目标,但是他们的方法对我不起作用。我不断收到运行时错误453
。不幸的是,我对如何解决此问题没有足够的想法,所以我决定寻求一些指导。如果能帮助我解决问题,我将不胜感激。如果可以使用VBA中DLL类返回的对象,请赐教!
这是我的代码:
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
谢谢!