我是在winwebmail上做二次开发,为的是集成到公司的OA系统中。
winwebmail也提供了SDK。php代码如下:<?php
 $ei = new COM("easymail.InfoList") or die("无法连接组件");
 $ei->LoadMailBox("admin","in");
 $allnum = $ei->getMailsCount();
 echo $allnum;  
?>
执行正常,但是输出的是0。而admin用户的收件箱里是有两封邮件的。我又用asp试了下,代码如下:
<%
dim ei
set ei = server.createobject("easymail.InfoList")
ei.LoadMailBox "admin", "in"
allnum = ei.getMailsCount
response.Write(allnum)
%>
这个输出是2。两个方法明明都是一样的,调用的也都是同一个dll。为什么输出会不一样?
php用的是apache服务器,asp用的是IIS6.跟这个应该没有关系吧?唯一有可能的是php中 $ei->LoadMailBox("admin","in");这句代码并没有改变$ei的值。但是为什么asp的就可以呢?难道这个DLL库不是通用的么?

解决方案 »

  1.   

    可能你的 com dll 是 vb 写的,返回值是 vb 的数据类型你可以这样试一下
    ...
    $allnum = $ei->getMailsCount();
    echo strlen($allnum); //这里至少应输出1确认后,继续讨论
      

  2.   

    这里是输出了1,也就是说VB的数据类型。这边PHP默认的没有办法处理了?那应该怎么解决呢?
      

  3.   

    试试看.$allnum = $ei->getMailsCount;
    var_dump($allnum);
      

  4.   

    打印int(0)我又用c#试了。也是输出0。难道就只有asp能调用么?
      

  5.   

    先 var_dump() 看看是什么数据结构可以强制转类型
      

  6.   

    var_dump() 打印 int(0) 我用vs2005把他引用了。public interface InfoList
        EASYMAILLib 的成员int getMailsCount { get; }
        EASYMAILLib.IInfoList 的成员
      

  7.   

    再这样:
    $allnum = $ei->getMailsCount();
    echo base64_encode($allnum);帖出结果
      

  8.   

    MA ==> 0
    不行了,如果你能修改源程序,那么应另设属性或方法将其转换成字符型
    还有 $ei->LoadMailBox("admin","in"); 那两个参数的类型设置也是有讲究的
      

  9.   


    这个我用vs2005把这个DLL导进去了。void LoadMailBox(string username, string mailboxname)
        EASYMAILLib.IInfoList 的成员这是这个方法。
      

  10.   

    这个没有办法解决吗?dll我是改不了的。
    按说dll是通用的一个库啊。为什么只有asp调用它返回的值才正常呢?
      

  11.   

    既然他只支持 VBS,那么就只有用 VBS 访问了
    不行你在 ASP 中使用 JScript 同样是得不到值的