日期:2014-05-18  浏览次数:20855 次

com+不能返回正确值的问题?
首先声明的是因Delphi版的人实在是太少了,所以将贴子发在c#版讨论,这个没有语言上的差异,进入正题:
用Delphi写了一个COM+的类库,注册在Windows2003上,函数的返回值不正确,在本机(WindowsXP   SP2)上测试,可以返回正确的值.COM+类库如下:
unit   Uint_ComServer;
{$WARN   SYMBOL_PLATFORM   OFF}

interface

uses
    ActiveX,   Mtsobj,   Mtx,   ComObj,   ComServer_TLB,   StdVcl;

type
    TDComServer   =   class(TMtsAutoObject,   IDComServer)
    protected
        function   GetInteger:   SYSINT;   safecall;
        function   GetString:   WideString;   safecall;

    end;

implementation

uses   ComServ;

function   TDComServer.GetInteger:   SYSINT;
begin
      Result   :=   1234;
end;

function   TDComServer.GetString:   WideString;
begin
        Result   :=   'Return   String. ';
end;

initialization
    TAutoObjectFactory.Create(ComServer,   TDComServer,   Class_DComServer,
        ciMultiInstance,   tmApartment);
end.

在本机测试都可以返回正确的值,用服务器测试,GetInteger返回的是0,GetString返回的是空字符串.是什么原因呢?

------解决方案--------------------
沙发,帮忙顶
------解决方案--------------------
没学过Deplphi的语法..帮顶

本机测试正常,你拿到别的机上测试保证系统和SP都一样话,还是会出问题的话就应该是调用的方法的问题
------解决方案--------------------
返回类型不用string,用byte[]。
44,我在c#调用c++时都是这样。
------解决方案--------------------
权限问题
------解决方案--------------------
服务里面的COM+ System Application和COM+ Event System是否已经开启