2013-05-22 6 views
2

우리는 우리의 응용 프로그램에서 Visual C++ 6.0으로 개발 한 클라이언트에서 ActiveX 컨트롤을 사용합니다. 또한 omniORB 2.7을 사용하여 서버 앱에 연결합니다. 그것은 잘 작동했습니다. 하지만 지금은 Windows 7, 64 비트 PC에서이 응용 프로그램을 실행해야합니다. ActiveX 컨트롤이 작동 중입니다. 하지만 아래와 같이 ORB의 resolve_initial_references 함수를 호출하는 C++ 코드에서 :resolve_initial_references는 SystemException을 발생시킵니다.

try 
{ 
    // Obtain a reference to the root context of the Name service: 
    CORBA::Object_var initServ; 
    initServ = orb->resolve_initial_references("NameService"); 
} 
catch(CORBA::ORB::InvalidName& ex) 
{ 
    FormAndOpenHataDialog("Service Required is Invalid [does not exist] !", __FILE__, __LINE__); 
    return CORBA::Object::_nil(); 
} 
catch(CORBA::SystemException & ex) 
{  
    FormAndOpenHataDialog(ex.NP_RepositoryId() , __FILE__, __LINE__); 
    return FALSE; 
} 

는 그것은 SystemException이 발생합니다. XP, 32 비트 시스템에서는이 작업을 수행하지 않았습니다. 나는 예외의 원인을 찾으려고 노력했다. 하지만 나갈 수있는 것은 모두 NP_RepositoryId()이었습니다. 인쇄 : IDL : omg.org/CORBA/NO_RESOURCES.

연결 문제가 있다고 생각하지 않습니다. ORB의 init() 기능이 문제없이 작동하기 때문입니다. 또한 허용되는 연결 수가 초과되었다고 생각하지 않습니다. 그건 말이되지 않습니다. NO_RESOURCES 라고만 말합니다. minor 코드를 인쇄하려고했습니다. 그러나 그것은 비었다. 그 밖의 무엇을 할 수 있습니까?

편집 : 나는이와 서버 응용 프로그램을 시작 : 클라이언트가 문제가 이름 서비스에 대한 초기 참조를 찾는 데처럼 -ORBInitialHost 192.168.1.8 -ORBInitialPort 900 -BOAiiop_port 5140

+0

클라이언트 응용 프로그램을 올바르게 구성하여 이름 지정 서비스를 찾으십니까? 보통 omniORB 설정 파일에'InitRef'를 설정합니다. 'InitRef = NameService = corbaname :: host1.example.com'. –

+0

현재 클라이언트는 레지스트리 ORBInitialHost 및 ORBInitialPort 정보에서 사용합니다. – Halo

+0

작동중인 컴퓨터에서이 레지스트리 항목을 삭제하려고 시도했습니다. 나는 같은 오류가있다. 따라서 어떤 이유로이 새로운 PC가 레지스트리에서 호스트 및 포트 정보를 얻을 수 없다는 것이 확실합니다. – Halo

답변

1

그것은 소리. omniORB 구성 파일, 환경 변수, 명령 줄 인수 또는 레지스트리 (Windows의 경우)와 같이이 정보를 클라이언트에 제공하는 방법을 확인하십시오.

+0

여기에서 다시 작성하겠습니다. 32 비트 omniORB의 경우 레지스트리에서 초기 참조를 얻는 경우; 64 비트 PC에서 레지스트리 정보 (예 : ORL/​​omniORB/2.0)는 Wow6432Node 키 아래에 있어야합니다. 그것이 앱이 초기 심판을 찾는 곳입니다. – Halo