使用MarshalAs时接口方法的语法是什么?

时间:2012-08-01 16:21:44

标签: c# asp-classic marshalling

我正在尝试创建一个包含方法的COM对象。该方法返回一个必须编组的数组,因为它正由Classic ASP使用。

我发现有关堆栈溢出的问题,告诉我如何为属性而不是方法。

这就是我的尝试:

public interface IMine
{
  [DispId(1)]
  object stringSize(string txt, string fontName, float fontSize)
  {
    [return: MarshalAs(UnmanagedType.Struct, SafeArraySubType = VarEnum.VT_ARRAY)]
  }
}

因为我收到了错误,这显然是错误的:

The name 'MarshalAs' does not exist in the current context

这对我没什么意义。

实际方法是:

    public object stringSize(string txt, string fontName, float fontSize)
    {
        System.Drawing.SizeF result = _textSize(txt, fontName, fontSize);
        return new object[] { result.Width, result.Height };
    }

请有人纠正我的语法。

1 个答案:

答案 0 :(得分:1)

您必须将属性目标定义置于方法声明之上

public interface IMine 
{ 
  [DispId(1)]
  [return: MarshalAs(UnmanagedType.Struct, SafeArraySubType = VarEnum.VT_ARRAY)]  
  object stringSize(string txt, string fontName, float fontSize) 
  { 
    // stuff...
  } 
}