.idl文件部分内容:
typedef string User;
typedef sequence<User> UserList;
=================================
部分C++映射代码:
typedef char * User;
typedef ::CORBA::String_var User_var;
typedef ::CORBA::String_out User_out;
其中String_var 是对Char*封装的一个类:
http://blog.chinaunix.net/uid-12818620-id-2914335.html
大概封装内容如上:
所以如需实现类似以下函数:
int corba_client::get_user_by_num(char *name, int num)
{
char* value[] = {"hello"};
if (num < 0 || num > (int)usrlist->length())
return -1;
//Chat::UserList::value_type
if((Chat::ChatServer_ptr)chatserver != NULL)
{
/获取usrlist中第num-1个用户,这是一个User_var 类型,说明sequence<User> UserList;中的User映射为User_var而不是string对应的char*类型
Chat::User_var item = (*usrlist)[num];/
strncpy_s(name, strlen(name), item.in(), sizeof(item.in()));
}
return 0;
}
则可以参照:
#include <cstring>
#define MAXLINE 100
{
private:
char * strPtr_;
public:
//构造函数
String_var():strPtr_(0){}
String_var(char* p)
String_var(const char* p)
{
this->strPtr_ = corba::string_dup(p);
}
//拷贝构造函数
String_var(const String_var& p)
{
this->strPtr_ = corba::string_dup(p.strPtr_);
}
//析构函数
~String_var()
{
cout << "Destructing" << endl;
corba::string_free(this->strPtr_);
this->strPtr_ = 0;
}
char* _retn(void)
{
char *temp = this->strPtr_;
this->strPtr_ = 0;
return temp;
}
{
return this->strPtr_;
}
char*& inout(void)
{
return this->strPtr_;
}
{
corba::string_free(this->strPtr_);
this->strPtr_ = 0;
return this->strPtr_;
}
//可读可写 ,返回char*的引用
CORBA_INLINE operator char*&(void);
CORBA_INLINE operator const char*(void) const;
String_var& operator=(char *p);
String_var& operator=(const String_var& p);
friend ostream& operator<<(ostream& oo,const String_var& p);
CORBA_INLINE char operator[](unsigned long idx)const
{
return this->strPtr_[idx];
}
CORBA_INLINE char& operator[](unsigned long idx){
return strPtr_[idx];
}
};
{
return this->strPtr_;
}
{
return this->strPtr_;
}
{
if(this->strPtr_ != p)
{
corba::string_free(this->strPtr_);
this->strPtr_ = corba::string_dup(p);
}
return *this;
}
{
corba::string_free(this->strPtr_);
this->strPtr_ = corba::string_dup(p);
return *this;
}
String_var& String_var::operator=(const String_var& p)
{
if(this != &p)
{
corba::string_free(this->strPtr_);
this->strPtr_ = corba::string_dup(p.strPtr_);
}
return *this;
}
{
oo << p.strPtr_ ;
return oo;
}
}
int main()
{
corba::String_var toStr;
toStr = corba::string_dup("Hello World!");
corba::String_var formStr;
formStr = toStr;
cout << formStr << endl;
formStr = corba::string_dup("jkdjflsadjfklsdjflksjdf");
cout << formStr << endl;
return 0;
}