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
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)