1

当社のソフトウェアビジネスの一環として、開発者が当社のソフトウェアを自社のソフトウェアに統合するための開発キットを提供しています。私たちは通常、多くの異なる言語/環境に対応しようとします。

最近、MicrosoftのDynamicsNAVを使用している潜在的なクライアントからいくつかの問い合わせがあります。SDKのフレーバーの1つは、NAVで参照できるCOM呼び出し可能dllです。

これで、APIのメソッドの1つが文字列配列を返します。私たちがパイロットプログラムを実行している開発者の1人が、その方法を使用して問題が報告されましたが、彼はそれを回避する方法を見つけることができませんでした。配列の最初のインデックスを返すだけの回避策を彼に与えなければなりませんでしたが(これは彼の特定の目的には十分です)、これは明らかに解決策ではありません。

残念ながら、Navisionの経験はありません。また、Navisionのライセンスコピーもありません(試用版ではコードをいじくり回すことができないようです)。また、これに関する情報をオンラインで見つけることができませんでした。

これが可能かどうか誰かが知っていますか?もしそうなら、それを行う正しい方法は何ですか?

4

1 に答える 1

2

「ディメンション」はNAVのアレイに固定されているため、COMからアレイベースのデータを送受信することは困難です。

同じ問題は発生していませんが、逆の問題が発生しました(文字列の配列をCOMに渡す)。最も簡単な方法の1つは、ループと関数を使用して文字列をCOM/DLLに送信することでした。一度に、フラグなどで完了を通知します。.NETでは、必要に応じて文字列を追加し続けることができるため、無制限の配列が役立ちます。DLLが.NETベースであると仮定します。

つまり、.NETからC/ALへ。

  • 配列ループが終了したことをC/ALに通知するフラグまたは関数
  • C / ALは、フラグが設定されるまで、ループを使用して各「要素」をフェッチできます
  • .NETは、配列アイテムを1つずつフィードする必要があります

つまり、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 に答える