Ave! Acreditem se quiserem: eu encontrei uma ORB utilizável no Java, no C++ e no perl. Gostaria que algum de vcs também desse uma olhada. Instalação: http://www.engroom.com/ercorba.html HOWTO: Tem apenas uns 850k (não chega a 10 M com todos os .o e .class das compilações). O programa de instalação (?) assim como o compilador IDL são feitos em Java, então ele precisa de uma JVM pra rodar (o jdk 1.1.8 serve). - Descompactem o zip em algum canto; - Vcs vão ver um monte de arquivos de Java. Não se preocupem. Rodem "java EngineRoomCORBA" dentro desse diretório, a partir do X ou um prompt de DOS da vida (de dentro do Windows). Aparece uma janelinha Java noJenta. Eca. Ele vai perguntar o diretório de instalação e coisas assim. Ele vai criar um diretório doc lá dentro, com a documentação (que é *bem* pobre, dá pra ler inteira em vinte minutos). Ah, sempre que vcs forem usar o compilador IDL, rodem ". env.sh" ou afins no diretório de instalação. Isso vai configurar o classpath pro Java, o libpath pro perl e outras tranqueiras. Os makefiles dos testes talvez dependam disso também. Pra C e C++ (Java e perl não): precisa criar uma biblioteca (liborb.a) que fornece a ORB: diretório orbsrc. Beware: usem "make -f gcc.mak", não apenas "make". Servidor de nomes: diretório cos/sua linguagem favorita (é uma pra C e uma pra C++). Também usem o -f. Taí, CORBA instalado. Testes: o diretório samples/test contém os testes que eu rodei (em samples tem uns outros exemplinhos). Os clientes/servidores daí são interopeáveis (eu rodei cada servidor com cada cliente; SIM, FUNCIONOU); todos usam as interfaces samples/*.idl. Não testei em máquinas diferentes porque estou em casa (dã). * Pro C: em samples/test/c, rodem "make -f gcc.mak". O cliente é "client", o servidor "server". * Pro Java: em samples/test/java, rodem "make". O cliente é "java client", o servidor "java server". * Pro perl: em samples/test/perl, rodem "make". O cliente é "perl client.pl", o servidor "perl server.pl". * Pro C++: é o único que dá pau. Tinha que ser. - Editem o arquivo samples/funcargs.idl. Lá pela linha 30, vcs vão ver algo parecido com uma struct com um switch dentro. Botem uma linha default depois dos cases, indicando um tipo e um campo; por exemplo, "default : short e ;". Aí ele vai compilar sem reclamar de coisas obscuras. Não me perguntem como eu descobri isso. Não me perguntem por quê dá pau. Não me perguntem por que só dá pau com o C++, já que a IDL é igual pros quatro. - Editem o makefile (gcc.mak). Tem uma variável O_SERV contendo os .o do servidor. Acrescentem a ela dois .o: são os .o do cliente (tão logo acima, em O_CLNT), _menos_ client.o (senão ele vai reclamar de dois main()). Não me perguntem como eu descobri isso. Não me perguntem por quê o linker reclama de mil coisas se não incluir os .o do cliente no servidor (ah, no servidor C eles _não_ são incluídos). O cliente é "client", o servidor "server". Pro teste, rodem na mesma máquina algum "server", em seguida algum "client". Ele vai cuspir um monte de coisas; pelo que eu entendi, ele testa todos os tipos primitivos, as structs e as exceções. O teste de C++ (*CENSURADO*) dá resultados levemente diferentes, ele não registra uma das exceções, no finalzinho. É isso aí. Révi Fã (TM). Por favor, algum de vocês pode tentar rodar esse trem em alguma outra máquina, pra gente ver se funciona ok? Eu vou tentar rodar na rede assim que eu for pra rede. Ah, Nelson, eu examinei o código do cliente; meu perl tá bem enferrujado, mas parece aquilo que a gente achava mesmo. Dá uma lida na documentação sobre perl, acho que fará mais sentido pra vc do que pra mim. Enfim: a documentação é tosca, e a ORB é bem simplificada, não vi nada sobre trading ou eventos, por exemplo. Mas cobre todas as linguagens que a gente vai usar. E funciona. Opinem. --- update --- Veja o arquivo topatch.txt