VS - Aufgabe 5 (2)

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

VS - Aufgabe 5 (2)
Also in der Angabe steht: Einfache Beispielanwendung - "Eine Möglichkeit stellt folgende IDL dar:

(…)
interface HelloServer {
void sayHello(in Printer prt, in message msg);
};
"

Gibt leider den idlflex Fehler “FimoObjectCreater: get: failed to resolve scoped name!org.aspectix.IDLparser.pub.IDLException: error(line 22 in file “a5_server.idl” ): unknown type Printer”

Weiß einer, was man dagegen tun kann?
Danke!


Also in der Aufgabenstellung wird vorher ja noch das interface Printer definiert. Fehlt das bei dir vielleicht?


:wand:

Ich hatte die beiden Interfaces in verschiedenen Dateien, danke.


Aber irgendwie funktioniert das trotzdem nicht. In meiner IDL steht:

	interface Printer
	{
		void write(in message msg);
	};

	typedef Printer				PrinterType; // trick 17

	interface HelloServerServer
	{
		void sayHello(in PrinterType prt, in message msg);
	};

Der generierte Code ist:

#include "HelloServerServerImpl.h"
 void HelloServerServerImpl:: sayHello( const value0 , const char value1[ 256 ] ) {
    // TODO: place code here
    
}

Der lässt einfach den Typ weg (‘const value0’). Muss ich da in der XML-Datei etwas ändern?

Vorgegeben war:

Anscheinend muss man Unsupported Type in TypeMapper durch etwas anderes ersetzen. Ich habe ‘’ probiert, aber dann gibt es einen IDLFlex Fehler:

IDLflex(IDLflex):
org.aspectix.IDLflex.IDLflexException: not a basic type
Current interface repository object:
Printer [ IDL:a5_serve/VS/Printer:1.0 ] { org.aspectix.IDLflex.IRObj.InterfaceObj@4a63d8 }
PrinterType [ IDL:a5_serve/VS/PrinterType:1.0 ] { org.aspectix.IDLflex.IRObj.AliasObj@74c3aa }

Wie hast du (habt ihr) das gemacht?

PS: mit

	interface HelloServerServer
	{
		void sayHello(in Printer prt, in message msg);
	};

funktioniert es auch nicht :rolleyes:


Probiers mal mit

Unsupported Type in TypeMapper

(Beachte das zusätzliche Case mit dem InterfaceObj)


Ok, das funktioniert jetzt, aber leider wird nur das LETZTE Interface generiert :frowning:

Beispiel:

IDL:

	interface Printer
	{
		void write(in message msg);
	};

	typedef Printer				PrinterType; // trick 17

	interface HelloServerServer
	{
		void sayHello(in PrinterType prt, in message msg);
	};

Ausgabe:

#ifndef _HelloServerServerImpl_
 #define _HelloServerServerImpl_
 class HelloServerServerImpl {
    public: void sayHello( const Printer value0 , const char value1[ 256 ] );
    
    
}
;
#endif

Was hast du denn da gemacht? Ich habe in der XML Datei Experimente mit

<ITERATE NAME="INTERFACE">

und

<ITERATE NAME="InterfaceComp">
   <CALL NAME="HeaderComp"/>
   <CALL NAME="BodyComp"/>
</COMPONENT>

gemacht, beides gibt aber IDLFlex Fehler :#:


Ich hab

<ITERATE NAME="PARAM">
                   <CALL NAME="ParamComp"/>
                </ITERATE>

(in ParamComp wird dann der TypeMapper etc aufgerufen)