我正在尝试使用以下示例代码从Delphi应用程序自动化PDFCreator:
procedure TForm13.Button1Click(Sender: TObject);
var
PDFCreatorQueue,
job: OleVariant;
begin
PDFCreatorQueue := CreateOleObject('PDFCreatorBeta.JobQueue');
if not VarIsNull(PDFCreatorQueue)then
begin
try
PDFCreatorQueue.Initialize();
//
// if not PDFCreatorQueue.WaitForJob(15) then
// MessageDlg(SPDFCreatorTimeout, mtError, [mbOK], 0)
// else
// begin
// job := PDFCreatorQueue.NextJob();
// job.ConversionProfileByGuid := 'DefaultGuid';
// job.ConvertTo(FilePath);
//
// if(not job.IsJobFinished or not job.JobSucceed) then
// MessageDlg(Format(SPDFCreatorCouldNotConvertFile, [FilePath]), mtError, [mbOK], 0);
// end;
finally
PDFCreatorQueue.ReleaseCom();
end;
end
else
MessageDlg(SPDFCreatorConnectionError, mtError, [mbOK], 0);
end;
在PDFCreatorQueue.Initialize()行;发生异常:
EOleSysError,带有消息'参数数量无效'
PDFCreator端的Initialize方法没有任何参数:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[Guid("66A9CAB1-404A-4918-8DE2-29C26B9B271E")]
[ProgId("PDFCreatorBeta.JobQueue")]
public class Queue : IQueue
{
...
/// <summary>
/// Initializes the essential components like JobInfoQueue for the COM object
/// </summary>
public void Initialize()
{
我错过了什么?
答案 0 :(得分:1)
从Delphi调用COM有特定的行为。
当您实现.net com visible assembly
的参数减少方法时class CShaprClass
{
Initialize();
}
当你在Delphi代码中调用这样的参数less方法时:
PDFCreatorQueue.Initialize();
您将获得无效参数错误。 这个调用方法转录中的Delphi通知COM将发送参数。
你应该致电
PDFCreatorQueue.Initialize;
祝你好运, IRQ MISHELL