Delphi 获取传真作业状态

Delphi 获取传真作业状态,delphi,winfax,Delphi,Winfax,我已尝试使用以下代码发送传真: uses ComObj, ActiveX, FAXCOMEXLib_TLB; procedure TForm1.Button1Click(Sender: TObject); var I: Integer; JobIDs: OleVariant; FaxServer: IFaxServer2; FaxDocument: IFaxDocument2; begin try FaxServer := CoFaxServer.Create;

我已尝试使用以下代码发送传真:

uses
  ComObj, ActiveX, FAXCOMEXLib_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  JobIDs: OleVariant;
  FaxServer: IFaxServer2;
  FaxDocument: IFaxDocument2;
begin
  try
    FaxServer := CoFaxServer.Create;
    FaxServer.Connect('');
    FaxDocument := CoFaxDocument.Create;
    FaxDocument.Body := 'd:\Document.pdf';
    FaxDocument.DocumentName := 'Document name';
    FaxDocument.Recipients.Add('+1 (425) 555-4567', 'Bill');
    FaxDocument.Sender.Name := 'Bob';
    FaxDocument.Sender.BillingCode := '23A54';
    FaxDocument.Sender.Department := 'Accts Payable';
    FaxDocument.Sender.FaxNumber := '+972 (4) 555-9070';
    JobIDs := FaxDocument.ConnectedSubmit(FaxServer);

    for I := VarArrayLowBound(JobIDs, 1) to VarArrayHighBound(JobIDs, 1) do
      ShowMessage('Job ID: ' + VarArrayGet(JobIDs, [I]));
  except
    on E: EOleSysError do
      ShowMessage(
        Format('Sending of the fax failed! %s [%d]', [E.Message, E.ErrorCode])
      );
  end;
end;
我想做的是获取发送传真的工作状态。我试图补充一点

var
  FaxJobStatus: IFaxJobStatus;
.....

FaxJobStatus := CoFaxJobStatus.Create;
编译源代码并没有发现错误,但在执行代码后,在 FaxJobStatus:=CoFaxJobStatus.Create 说“班级未注册”

来自:

您不创建FaxJobStatus对象。当您实现IFaxServerNotify::OnIncomingJobChanged或IFaxServerNotify::OnOutgoingJobChanged(包括FaxJobStatus类型的参数)时,它将作为通知的一部分接收。当事件发生并调用已实现的函数时,您将收到包含动态信息的此对象


因此,您必须注册
IFaxServerNotify.OnIncomingJobChanged
IFaxServerNotify.OnOutgoingJobChanged
事件。收到事件后,您将获得FaxJobStatus对象,并可以读取其
状态
属性。

感谢您提供文档链接。我已经阅读了它,并且按照我的理解,我尝试将FaxServer.ListentServerEvents(fsetOUT_队列)添加到代码中,并创建了一个只返回消息的过程FaxServer_OnOutgoingJobChanged(FaxServer:IFaxServer;JobId:String;JobStatus:FaxJobStatus)。现在,我如何让这个过程处理IFaxServerNotify.OnOutgoingJobChanged方法?恐怕要复杂得多。您需要实现一个用作COM事件接收器的类,然后使用advice()注册该事件(并在使用完Unadvice,IIRC后取消注册)。雷米·勒博(Remy Lebeau)刚刚在这里演示了这一点(不过,并不是为了传真身份)。我会看看是否能找到这个答案的链接。这是我提到的一个由雷米。再次感谢你的洞察力。我找到了一个。现在的问题是,faxcomexlib在faxcomexlib_tlb.pas中,而不是在faxcomexlib.tlb中。据我所知,.tlb可以在类型库中打开。有没有办法将.pas转换为.tlb?或者这个问题需要另一个问题帖子吗?你不能“将.pas转换为.tlb”。将该
faxcomexlib_tlb.pas
文件添加到uses子句中(就像任何其他Delphi单元一样),然后可以在自己的代码中使用其中声明的接口和类。