不是精通delphiApplication,是普通delphi Application

解决方案 »

  1.   

    好好,看看帮助吧,classname一定要搞正确了。
      

  2.   

    我在isapi是用ado就会出错,不知怎么回事。
      

  3.   

    CoInitialize(nil);
      // createolobject....
    CoUnInitialize;
    试试
      

  4.   

    调用接口时好像就是要:
    CoInitialize(nil);
      // createolobject....
    CoUnInitialize;
      

  5.   

    在actions中我这么写的:
    procedure TWebModule1.WebModule1GetDataAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var stmp:string;
        Callobj:OleVariant;
        f:textfile;
    begin
      stmp:=trim(request.Content);
      stmp:=trim(copy(stmp,6,length(stmp)));
      if length(stmp)=0 then exit;  AssignFile(f,'c:\http.Log');
      if FileExists('c:\http.Log') then Append(f) else rewrite(F);
      Writeln(f, InterChangeLibrary+#13#10+stmp);
      closefile(f);  CoInitialize(nil);
      CallObj:=CreateOleObject(InterChangeLibrary);
      CallObj.Submit(stmp,'2.4');
      CallObj:=Unassigned;
      CoUnInitialize;
    end;
    我把写文件放在前文件就写出来了,放在后就写不出来了,我用普通delphi的应用程序调用,我那边的断点就激活了,但在这个isapi的dll中却全无反应,救命!
      

  6.   

    你试一下将你的组件放到mts中,并在mts中给建立的这个package指定用户及权限. 
      

  7.   

    请告知你组件声明的线程模型,并于注册表中确认(CLSID\@Apartment值)。
    你在ISAPI中不能激活断点是因为在之前的语句中已经出现了Exception。
    我判断比较大的可能是线程模型的冲突,如果可能的话你在一个普通得DelphiApp里面用线程调用你的对象看看是否还能正确?应该也是会出错的。例如:TComponentTestThread = class(TThread)
      procedure Execute; override;
    end;procedure TComponentTestThread.Execute;
    var
      v: Variant;
    begin
      CoInitializeEx(nil, COINIT_XXX); // or OleInitialize if you invoke OLE Services
      try
        v:=CreateOleObject(YourProgID);
        v.CallYourMethod;
        v:=Unassigned; // omittable but recommend for clarity
      finally
        CoUninitialize; // or OleUninitialize if it's by OleInitialize
      end;
    end;注意因为OLE不是thread safe的,所以OleInitialize只能够将所属线程声明为STA。但是CoInitializeEx可以指定所需的线程模型,STA或MTA(COINIT_APARTMENTTHREADED或COINIT_MULTITHREADED)。最好使用同你组件相同的线程模型以避免额外的marshal操作降低性能。BTW:1,用于通过IDispatch调用对象的CallObj变量不用声明成OleVariant, Variant就可以了。具体参考文档Index:OleVariant。2, 不是因为你的组件是Ole Automation的(支持IDispatch)就需要用OleInitialize,当不需要使用Ole服务时(如托拽支持)应该仅用CoInitialize(Ex)以避免额外的系统开销。
      

  8.   

    Sorry没睡醒呢,CLSID\@Apartment应该是CLSID\{Your ClassID}\ThreadingModel的值。你看看设置的是什么?
      

  9.   

    JGTM2000(铁马小子) :请您说详细些,这部分我接触较少!
      

  10.   

    JGTM2000(铁马小子) :去哪了,你别说不冷不热不着边的话,我现在应该怎么做呢?
    急!谢谢!
      

  11.   

    ISAPI程序是非常难调的,我也在搞这个东西,写的没有错误,在一般的APPLICATION下通过没有问题,但放到DLL里就不行,写的我想哭……
      

  12.   

    要是你这样都能实现得话,那么人家得木马远程就能激活了(涉及IIS服务器的安全问题)
      

  13.   

    贴一下OnAction的代码看看了!
      

  14.   

    浪人:以上我WebModule1GetDataAction中的就是onaction的代码!