1

作为我们软件业务的一部分,我们为开发人员提供了一个开发工具包,以便将我们的软件集成到他们的软件中。我们通常会尝试迎合许多不同的语言/环境。

最近,我们收到了一些使用 Microsoft Dynamics NAV 的潜在客户的询问。我们 SDK 的风格之一是 COM 可调用 dll,可以在 NAV 中引用。

现在,我们 API 中的一个方法返回一个字符串数组。我们正在运行一个试验计划的开发人员之一,使用该方法报告了问题,但他找不到解决方法。我们不得不给他一个解决方法,它只返回数组的第一个索引(这对于他的特定目的来说已经足够了),但这显然不是一个解决方案。

不幸的是,我们手头的 Navision 经验为零,我们也没有 Navision 的许可副本(试用版似乎不允许您修改代码),而且我无法在网上任何地方找到有关此的任何信息。

有谁知道这是否可能?如果是这样,正确的方法是什么?

4

1 回答 1

2

“维度”在 NAV 中的数组上是固定的,这使得从 COM 接收和发送基于数组的数据变得困难。

虽然我没有遇到同样的问题,但我遇到了相反的情况(将字符串数组传递给 COM),最简单的方法之一是使用循环和函数将字符串发送到 COM/DLL 中一次,然后用标志或类似的信号完成。无界数组在 .NET 中会很有用,因为您可以根据需要继续添加字符串。我将假设 DLL 是基于 .NET 的;

所以从 .NET 到 C/AL;

  • 让 C/AL 知道数组循环已完成的标志或函数
  • C/AL 可以使用循环来获取每个“元素”,直到设置标志
  • .NET 将需要一一提供数组项

所以从 C/AL 到 .NET;

与 .NET 到 C/AL 类似,但 .NET 具有无界数组,这使事情变得更容易一些。

DotNetArray.ClearArray;

REPEAT        
   DotNetArray.Add(Customer.Name);        
UNTIL 

DotNetArray.EndOfArray;

注意事项;

  • C/AL 中的数组索引是从 1 开始的,.NET 是从 0 开始的。
  • 另一种方法是传递计数和循环 x 次

以下文章也可能有用;http://dynamicsuser.net/blogs/waldo/archive/2011/03/21/nav-2009-r2-net-interop-using-arrays-collections.aspx

于 2012-11-13T21:49:14.590 回答