0

メソッドを含む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 };
    }

誰かが私の構文を修正してください。

4

1 に答える 1

1

属性ターゲット定義をメソッド宣言の上に配置する必要があります。

public interface IMine 
{ 
  [DispId(1)]
  [return: MarshalAs(UnmanagedType.Struct, SafeArraySubType = VarEnum.VT_ARRAY)]  
  object stringSize(string txt, string fontName, float fontSize) 
  { 
    // stuff...
  } 
} 
于 2012-08-01T17:18:54.837 に答える