如下:
Taa = class(TMtsAutoObject, Iaa)
private
FUserID: WideString;
protected
procedure SetInit(const pUserID: WideString); safecall;
procedure GetUserID(out pUserID: WideString); safecall;
end;procedure SetInit(const pUserID: WideString); safecall;
begin
try
FUserID := pUserID;
setcomplete;
except
SetAbort;
end;
end;
procedure GetUserID(out pUserID: WideString); safecall;
begin
try
pUserID := FUserID;
setcomplete;
except
SetAbort;
end;
end;
客户端调用:
procedure TForm1.Button1Click(Sender: TObject);
var
aa: Iaa;
sTemp: WideStirng;
begin
aa := coaa.Create;
aa.SetInit('001')
aa.GetUserID(sTemp);
ShowMessage(sTemp);
end;按设想,结果应该是:001
实际上是空。
因为Private的变量并没有为下一个方法而保留本次方法赋予的值。
请问各位,在COM+环境下是如何保留本次对象调用期间的公有变量。
Taa = class(TMtsAutoObject, Iaa)
private
FUserID: WideString;
protected
procedure SetInit(const pUserID: WideString); safecall;
procedure GetUserID(out pUserID: WideString); safecall;
end;procedure SetInit(const pUserID: WideString); safecall;
begin
try
FUserID := pUserID;
setcomplete;
except
SetAbort;
end;
end;
procedure GetUserID(out pUserID: WideString); safecall;
begin
try
pUserID := FUserID;
setcomplete;
except
SetAbort;
end;
end;
客户端调用:
procedure TForm1.Button1Click(Sender: TObject);
var
aa: Iaa;
sTemp: WideStirng;
begin
aa := coaa.Create;
aa.SetInit('001')
aa.GetUserID(sTemp);
ShowMessage(sTemp);
end;按设想,结果应该是:001
实际上是空。
因为Private的变量并没有为下一个方法而保留本次方法赋予的值。
请问各位,在COM+环境下是如何保留本次对象调用期间的公有变量。
解决方案 »
- 请教高手 用PageControl还是用MDI窗体?
- *******************新买的自行车在存车处丢了,大家说怎么办,是花钱存的,能赔吗。******************
- 关于截取某个软件的所有的通讯数据包
- 问关于Delphi2005的配置问题
- 求:一能统计局域网内各机打印数量的软件
- 高分求助!关于TPowersock的一段程序!!!请进来看看!!!
- 初见Delphi8 for .net 的感受
- 怎样在自己的程序中运行windowsODBC?急!
- 关于SQL 2000
- 一个用Ado做的程序,在用户机子上是否要用sql server 的 client network utility 增加一个与ado datasource同名的服务器名?
- 我想在dbgrid中所有记录的最下面加上一行总计,讲算出各列的总和,请问能不能实现
- 续“急救!!急救!!在SQL Server 2000管理器中误删除了一个数据库!”,现在数据库文件已经恢复,但是建库总提示“日志文件出错”??
感觉你没有把值带出来
你的Stemp没有分配内存
你试试先指向自己的一个值然后再往出带
按照你的说法,讲GetUserID方法改造:
procedure GetUserID(out pUserID: WideString); safecall;
begin
try
// pUserID := FUserID;
pUserID := 'abc'; //赋予常量值
setcomplete;
except
SetAbort;
end;
end;结果:abc。
问题还是没有解决。在COM+组件中公有变量的值只在当前方法中保留,方法执行完毕即释放。
然后再把这个值用@带出来
你没有弄明白我的意思
或者你可以试一下copy
平时的话总在用COM
没怎么用COM+
这就难怪了
使用COM+ 同使用COM其实思路改进很多的。。
嘿嘿,那只有在每个方法里增加初始化的参数了。700多个方法
to Apple
我也在Private域里定义了接口变量,但一直没有发现这个问题,在我使用private变量(数值变量)时才发现这个问题。嘿嘿,大发现啊。