首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用c#参数从testcomplete调用int[] dll函数

使用c#参数从testcomplete调用int[] dll函数
EN

Stack Overflow用户
提问于 2015-03-10 15:53:09
回答 1查看 458关注 0票数 0

我正在尝试从测试完整代码中调用一个c#库函数。

我根据海伦下面的答案创建的c#库的结构如下:(库的构建目标为3.5,其中包含一个通用的strongname键,并对32/64位进行了调整)

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace TestCompleteTest
{
    [Guid("122FD1AB-839F-4A3A-8A08-973A3836216B")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComVisible(true)]
    [ProgId("ArrayTest")]
    public class ArrayTest: IArrayTest
    {
        public void ArrayFunction(int[] arrayParameter)
        {
            using (StreamWriter writer = File.AppendText("C:\arraylog.txt"))
            {
                writer.Write("\r\nLog Entry : ");
                writer.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
                    DateTime.Now.ToLongDateString());
                writer.WriteLine("  :");
                writer.WriteLine("  :{0}", arrayParameter.Count());
                writer.WriteLine("-------------------------------");
            }
        }
    }

    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("00655BDE-A768-4EC0-9C9A-A903976195F2")]
    [ComVisible(true)]
    public interface IArrayTest
    {
        void ArrayFunction(int[] arrayParameter);
    }
}

我试图从TestComplete 10.40桌面客户机中调用此函数如下:

代码语言:javascript
运行
复制
procedure ArrayTest;
var arrayTest, arrType, arrayOfIntegers;
begin    
  arrayTest := Sys.OleObject('ArrayTest');  
  //Create array type
  arrType := dotNET.System.Type.GetType('System.Int32');
  //Create array
  arrayOfIntegers := dotNET.System.Array.CreateInstance(arrType, 5);
  //Fill array
  arrayOfIntegers.SetValue(1, 0);
  arrayOfIntegers.SetValue(2, 0);
  arrayOfIntegers.SetValue(3, 0);
  arrayOfIntegers.SetValue(4, 0);
  arrayOfIntegers.SetValue(5, 0);

  arrayTest.ArrayFunction(arrayOfIntegers);
end;

这仍然会导致testcomplete函数中下面一行中的消息“参数不正确”的异常。:arrayTest.ArrayFunction(arrayOfIntegers);

任何进一步的帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 16:57:59

TestComplete DelphiScript是一种ActiveScript-based语言(如Windows主机的VBScript和JScript),并使用变体数据类型。虽然数字、布尔值和字符串等简单值被正确地编组到.NET中,但是需要使用dotNET包装器在.NET端创建数组和枚举之类的“复杂”值:

代码语言:javascript
运行
复制
...
var arrayOfIntegers, arrType, enumType, enumParameter;
begin
  // Create a .NET array, e.g. {5}
  arrType := dotNET.System.Type.GetType('System.Int32');
  arrayOfIntegers := dotNET.System.Array.CreateInstance(arrType, 1);
  arrayOfIntegers.SetValue(5, 0);

  // Create an enumeration value, e.g. DayOfWeek.Tuesday
  enumType := dotNET.System.Type.GetType('System.DayOfWeek');
  enumParameter := dotNET.System.Enum.Parse(enumType, 'Tuesday');

  functionResult := CSharpLibrary.CSharpFunction(arrayOfIntegers, enumParameter);
end;

UPD:没有必要使.NET程序集COM-在TestComplete中使用它们是可见的。您需要将程序集添加到项目属性> CLR中。然后您可以像这样调用这个函数:

代码语言:javascript
运行
复制
arrayTest := dotNET.TestCompleteTest.ArrayTest.zctor();
arrayTest.ArrayFunction(arrayOfIntegers);

或者如果ArrayFunction是一个静态方法:

代码语言:javascript
运行
复制
dotNET.TestCompleteTest.ArrayTest.ArrayFunction(arrayOfIntegers);

文档还有更多的细节:从.NET程序集调用函数

此外,在SetValue方法中,第二个参数是元素索引,因此它应该是:

代码语言:javascript
运行
复制
arrayOfIntegers.SetValue(1, 0); // value, index
arrayOfIntegers.SetValue(2, 1);
arrayOfIntegers.SetValue(3, 2);
arrayOfIntegers.SetValue(4, 3);
arrayOfIntegers.SetValue(5, 4);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28968235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档