3

我有一个简单的课程:

class MyExample : public POA_Example
{
   CORBA::String_var field;

   public:
             char* getField();
             void setField(const char* f);
};

char* MyExample::getField()
{
   return CORBA::string_dup(this->field.out());
}

void MyExample::setField(const char* f)
{
   this->field = CORBA::string_dup(f);
}

和主要应用程序:

#include "MyExample.h"
#include <iostream>
using std::cout;

int main()
{
  MyExample e;
  e.setField("Hello");
  cout << e.getField() << "\n";
  return 0;
}

我使用omniORB,我上面给出的代码没有显示任何内容......这里有什么问题?

4

2 回答 2

1

试试这个,它对我有用:

interface Example
{
    string getString();
    void setString(in string s);
    long getLong();
    void setLong(in long l);

};

#include "example.hh"

class MyExample : public POA_Example
{
    private:

        CORBA::Long l;
        CORBA::String_var s;

    public:

        char* getString();
        void setString(const char* s);
        ::CORBA::Long getLong();
        void setLong(::CORBA::Long l);
};

#include "MyExample.h"

char* MyExample::getString(){
    return CORBA::string_dup(this->s.in());
}

void MyExample::setString(const char* s){
    this->s = CORBA::string_dup(s);
}

::CORBA::Long MyExample::getLong(){
    return this->l;
}

void MyExample::setLong(::CORBA::Long l){
    this->l = l;
}

#include "MyExample.h"
#include <omniORB4/CORBA.h>
#include <omniORB4/Naming.hh>
#include <iostream>
using std::cout;
using std::cerr;

int main(int argc, char **argv)
{
    MyExample me;

    me.setLong(1234654);
    cout << "Long: " << me.getLong() << "\n";

    me.setString("Hello");
    cout << "String: " << me.getString() << "\n";

    return 0;
}
于 2012-08-07T17:20:06.717 回答
1

如果您使用的是omniORB,您可能必须至少调用orb_init()字符串操作才能正常工作。否则,您拥有的代码似乎很好。

(尽管您不必调用string_dup()setField()函数,因为String_var当您为其分配一个 时,该类会自动执行此操作const char*。)

(而且你通过调用e.getField()你的. 来泄漏内存cout。但这不应该阻止你看到一些东西。)

于 2012-08-08T00:00:43.473 回答