声明函数语句VBA到VB.网络和数组维度



我在VBA对象中有一些xsl函数的对象包装器,我试图将该对象翻译为vb.net,作为COM dll加载项。VBA像这样声明xsl函数:

Private Declare Function ExternalFunction Lib "C:MyLibrary.xll" _
(ByVal x as double, ByVal y as double, ByVal Arr1D() as double, _
ByVal Arr2D() as double, ByVal ResultArray() as double, ByVal ErrorMssg as string) _
As Long

前两个数组参数中,第一个是一维的,第二个是二维的。因为我将发送一个2D数组,vb.net强制我从

改变声明的这一部分:
Arr2D() as double

Arr2D(,) as double

这个在COM上下文中应该可以工作吗?我花了很长时间检查每一个输入,我仍然得到一个关于对象与其客户端断开连接的错误。我可能会错过一些东西,但我担心函数声明和数组排名,这是在VBA快乐在一起,现在可能不快乐。

(另外,奇怪的是,我注意到所有的参数都被声明为ByVal——而函数绝对会改变ResultArray和ErrorMessage(这些是真正的返回…)。ByVal声明在VBA中是如何工作的?我的问题可能是那些应该是ByRef,和vb.net是不太宽容吗?)

编辑:好的回到VBA。我现在看到,在包装的十几个函数中,有些有ResultArray发送ByRef,有些发送不合格。Visual Studio把ByVAl放在这里。我想这可能是我的问题。如果可能的话,我仍然希望vb.net形式声明数组参数的秩应该是可以的。(奇怪的是,对我来说,所有的ErrorMessage字符串都在VBA中声明为ByVal——它们确实可以从XLL返回错误消息…)

逗号不是问题。问题在于Excel与VB.Net中"长"的含义。我搞砸了我的问题一点,只显示双精度和字符串作为参数的例子。我把注意力集中在我认为的问题上,而忽略了真正的问题。VBA中的Long为32位。在。net中,Long是64位。为了我的函数声明是正确的,我不得不把长整数,从VBA到VB。网,在实际申报。

因为我认为当他或他的项目Excel DNA被提及时,他总是睁大眼睛,我要在这里感谢Govert。这是他在这个帖子里的回复:

https://exceldna.codeplex.com/discussions/468416

给了我答案。(——有趣的什么?问题是,几年前,在同样的问题上,戈夫特曾经救过我一次,当时我更直接地问他。再次感谢,再次感谢,政府。(我没有想到这次去DNA论坛,因为其他人做这个项目没有它。)

相关内容

  • 没有找到相关文章

最新更新