COM+、CORBA几问 (100分)

  • 主题发起人 主题发起人 Sachow
  • 开始时间 开始时间
S

Sachow

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题困扰了我好几天,用CB调用一个用CB建立的COM组件成功,且用CB调用一个用
Delphi建立的事务类型为“需要事务”的COM+组件也成功了,但用CB调用一个用CB建立
的事务类型为“需要事务”的COM+组件却不能成功(什么都没有发生,也不报错),
这是怎么搞的呢?我在CB中建立此COM+组件的步骤和在Delphi中建立时的一样啊?
客户端调用代码如下:
{
TCOMISC_TransFunc Obj1;
WideString s;
Obj1 = CoSC_TransFunc::Create();
//GetDateTime函数是COM+组件中用来返回当前时间的
//该函数的IDL定义:HRESULT _stdcall GetDateTime([out, retval] BSTR * AResult );
Obj1->GetDateTime(&s);

ShowMessage(s);
Obj1->Release();
}
[2002-06-05] 现在已经暂不搞COM+了,搞CORBA,有几个问题,见后面……
可惜贴子不能加分,这问题解决后我再开其它的贴子。
 
s的类型改一改
wchar_t* s=new wchar_t[100];
Obj1->GetDateTime(&s);

ShowMessage(WideString(s));
看看?
 

新问题(CORBA问题):
近期重操CORBA,又有几个外围问题挥之不去,烦死人也!
1、不能向OAD注册对象以自动激活CORBA服务器。VisiBroker Activation Deamon也注册到
Win2000的服务中了,并且也启动了该服务,其它与CORBA相关的路径、JVM等都已经设置过
了,但用oadutil注册对象的时候却总是报“Failed to bind OAD”,这该怎么解决?
执行:
D:/Borland/CBuilder6/Projects/CORBA/CB6_Server>oadutil reg -i SC_CorbaObj1 -o
SC_CorbaObject1 -cpp D:/Borland/CBuilder6/Projects/CORBA/CB6_Server/CB_Svr1.exe
结果:
oadutil reg: Failed to bind to OAD
2、还是那个老问题,CORBA服务器程序启动时总是要报错:
PortableServer_POA::AdapterNonExistent with message 'Exception Object Address
0x15E85BE'
它不影响程序的运行,但很烦,能否解决?
 
自动注册的那招我也没弄成,跟
 
还有:一个返回字符串的方法,其内部该如果处理?
例如:
interface MyIntf1{
string GetFieldContent(in string FieldName);
};
CB会辅助生成这样的函数定义:
char* __fastcall TMyIntf1Impl::GetFieldContent(const char* _FieldName)
{
//返回相关字段里的文本内容
}
在C中,我都是尽量避免在这样的函数里返回一个静态字符串地址,杜绝返回局部字符串地
址,而设一个OutputBuf,例如:
char *func1()
{
static char s[30];
strcpy(s, "Hello, World!");
return s;
//在C程序中,我一般避免这样做,而采取下面的方法:
}
char *func2(char *OutputBuf)
{
strcpy(OutputBuf, "Hello, World!");
//OutputBuf的内存让调用者去分配
return Output;
}
但是在一个CORBA程序中,让客户端分配OutputBuf的内存,然后服务器端以out类型参数写
Output却不能成功,该怎么做呢?
面对这种情况,我只好用静态字符数组来处理了,但静态字符数组在面对字符串长度不定的
情况下又会面临新的困难,由于需要返回该字符串的地址,动态分配的内存由谁来释放?我
试过,如果不做妥善处理的话,接口方法在调用几次后就会生产内存访问错误。
 
我也准备用CORBA,关注!
 
补充一下,关于字符串的处理在很早前已经解决。原理实际上与COM相同,只是由于当时
我没有给Out参数的字符串分配内存致。
此外,请教各位用过CORBA开发系统的朋友,发布的时候有些什么步骤或注意事项?(在编
译时连“User dynamic RTL”选择都不能去掉,那岂不是要带一大堆运行时支持库才行?)
[准备在春节前结束此贴]
 
多人接受答案了。
 
后退
顶部