C# 来自经典asp调用.NET组件方法的变量参数值

C# 来自经典asp调用.NET组件方法的变量参数值,c#,.net,asp-classic,C#,.net,Asp Classic,我使用PDFsharp项目将许多pdf文档合并到一个文件中,该文件工作完美且平滑。 但我还需要从经典的ASP服务器页面调用此方法 也可以工作,但奇怪的是通过调用方法来处理param值 C#定义: public void MergeMultiplePDF(object[] files, string outFile) { // note: get an array from vbscript, so files need to be a object array, not string arr

我使用PDFsharp项目将许多pdf文档合并到一个文件中,该文件工作完美且平滑。 但我还需要从经典的ASP服务器页面调用此方法

也可以工作,但奇怪的是通过调用方法来处理param值

C#定义:

public void MergeMultiplePDF(object[] files, string outFile)
{
  // note: get an array from vbscript, so files need to be a object array, not string array.

  // Open the output document
  PdfDocument outputDocument = new PdfDocument();

  // Iterate files
  foreach (string file in files)
  {
    // Open the document to import pages from it.
    PdfDocument inputDocument = PdfReader.Open(file, PdfDocumentOpenMode.Import);

    // Iterate pages
    int count = inputDocument.PageCount;
    for (int idx = 0; idx < count; idx++)
    {
      // Get the page from the external document...
      PdfSharp.Pdf.PdfPage page = inputDocument.Pages[idx];
      // ...and add it to the output document.
      outputDocument.AddPage(page);
    }
  }

  // Save the document...
  outputDocument.Save(outFile);
  outputDocument.Dispose();
}
工作正常,因为数组是一个对象变量,我在.NET类中处理数组

但是如果我在经典ASP中有一个“动态”数组,我会得到一个通常的错误,即参数不正确,就像你在这里的许多帖子中可以找到的那样

样本:

Dim myFiles(10)
For i = 0 To UBound(myFiles)
  myFiles(i) = "test" & i & ".pdf"
Next
oPDF.MergeMultiplePDF myFiles, l_sPath & "output.pdf"
这遇到了一个参数错误

我的解决方法:

oPDF.MergeMultiplePDF Split(Join(myFiles,","),","), l_sPath & "output.pdf"
然后它就起作用了

两者都是类型为Array()的对象


因此,任何人都知道为什么处理方式不同吗?

在ASP中定义一个动态数组,如
ReDim myFiles(max\u count)
其中max\u count是一个数值,这会导致问题。例如,Dim myFiles(10)作为测试也可以像Simon测试一样工作


@Simon,请将您的评论设置为答案,以便我可以接受。

您发布的代码应与VBScript中的代码一样工作

VarType(Array(...)) = VarType(myFiles) = VarType(Split(...)) = 8204
8204=0x200C,它实际上在.NET中转换为
object[]


因此,实际的代码与此处显示的示例不同。

投票失败的人可以告诉我原因吗?您发布的代码应该是VarType(数组…)=VarType(myFiles)=VarType(Split…)=8204(variant数组)。您确定问题不是来自您的C#实现吗?@SimonMourier VarType()的myFiles和myFiles的Split/Join都是8204,这是正确的。但将myFiles设置为param,就像我在示例中写的那样,我得到一个错误800a0005(无效参数)。这就是为什么我发布我的问题来寻找这个奇怪情况的答案。在c#中,它只是定义为object[],所以这不重要,调用失败,而不是方法中的代码。我理解你所说的,但我用一个.VBS文件对它进行了测试,它对我有效(请检查:),我不明白为什么不应该。那么显示的代码真的是失败的吗?我添加了我的C#函数,也许这会有所帮助。但是如果代码产生错误,我将得到一个异常,而不是一个无效的参数错误。我也将代码从asp classic移动到了vbscript.vbs文件,出现了相同的错误。我试图减少我的代码(以您的示例为例)以进行调查……提示:正如您在我的回答中所看到的,问题在于数组的创建。用ReDim初始化的数组似乎无法将其值传递给.NET方法。所以我的变通方法仍然是必要的,但我知道为什么。
VarType(Array(...)) = VarType(myFiles) = VarType(Split(...)) = 8204