2

COBOL (アンマネージ) コードから呼び出す必要がある C# ライブラリを開発しています。したがって、これらの目的で COM 相互運用を使用しています。

通信を仲介するレイヤー「ModuleLanucher」を作成しました。これらのコマンドでこの ModuleLanucher ライブラリを登録しました。

regasm ModuleLanucher.dll /codebase
TLBEXP Modulelanucher.dll

関数 foo に具体的な数のパラメーターがある場合、すべてが正常に機能します。(後述)

残念ながら、私の関数 foo には可変数の引数が必要です。これは私のコードのスケッチです:

namespace NMSPC
{
   class ModuleLanucher
   {
      void foo(string moduleName, params object[] args)
      {
        //call some dlls with args as parameteres
      }
   }
}

COBOL コードから、COM 関数 foo を呼び出しています。

VCCOMServer is class "$OLE$NMSPC.ModuleLanucher"

invoke VCCOMServer "new" returning anInstance
invoke anInstance "foo" using MODULENAME, PARAM01, PARAM02, PARAM03, PARAM04

この COBOL コードから foo メソッドを呼び出そうとすると、次のエラーが発生します。

クラス oleexceptionmanager によってトラップされない例外 65538。説明: 「OLE パラメーター数の不一致」(8002000E): パラメーターの数が無効です

可変数の引数を持つ COM オブジェクト関数を使用することは可能ですか?

ご提案ありがとうございます

4

1 に答える 1

2

可変引数リストは、COM ではサポートされていません。メソッドのCOM部分は次のように変換されると思います:

void foo(string moduleName, object[] args) //note the missing params...

このメソッドを COBOL から呼び出すには、オブジェクトの配列を 2 番目の引数として渡す必要があります。

事前に最大 #parms がわかっている場合は、代わりに、この最大 #parms を使用してメソッドを定義し、それらを COM のオプションとして指定することもできます。

不足しているパラメータは として渡されType.Missingます。

于 2013-08-24T23:17:20.840 に答える