2013-07-03 2 views
2

COBOL (비 관리 코드)에서 호출해야하는 C# 라이브러리를 개발 중입니다. 그래서 이러한 목적으로 COM interop을 사용하고 있습니다.COM interop : 변수 개수 매개 변수

통신을 중재하는 계층 "ModuleLanucher"를 만들었습니다. 나는이 명령에 의해이 ModuleLanucher 라이브러리를 등록 : 내가 foo 함수에서 매개 변수의 구체적인 수있는 경우

regasm ModuleLanucher.dll /codebase 
TLBEXP Modulelanucher.dll 

모든 것이 잘 작동합니다. (아래 언급)

불행히도 내 함수 foo는 다양한 인수를 필요로합니다.

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

이 COBOL 코드에서 내가 COM의 함수 foo를 호출하고 있습니다 : 이 내 코드의 스케치입니다 나는이 COBOL 코드에서 foo는 메서드를 호출 할 때

VCCOMServer is class "$OLE$NMSPC.ModuleLanucher" 

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

, 나는이 오류가 발생합니다 :

예외 65538은 oleexceptionmanager 클래스에 트랩되지 않습니다. 설명 : "OLE 매개 변수 개수 불일치" (8002000E) : 매개 변수 개수가 잘못되었습니다.

가변 개수의 인수로 COM 개체 기능을 사용할 수 있습니까?

제안 해 주셔서 감사합니다.

답변

2

가변 인수 목록은 COM에서 지원되지 않습니다. 나는 당신의 방법의 COM 부분은로 변환 생각 :

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

는 COBOL에서이 메소드를 호출하려면 2 인자로 객체의 배열을 전달해야합니다.

포어 핸드의 최대 #params를 알고있는 경우이 최대 #parms를 사용하여 메서드를 정의 할 수도 있습니다. 여기서 #parms는 COM에 선택적으로 지정할 수 있습니다.

누락 된 매개 변수는 Type.Missing으로 전달됩니다.