2012-08-01 58 views
0

我想創建一個包含方法的COM對象。該方法返回一個數組,因爲它正在被經典ASP使用,所以必須進行編組。當使用MarshalAs時,接口方法的語法是什麼

我已經發現堆棧溢出的問題,告訴我如何做屬性而不是方法。

這是我曾嘗試:

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

您必須將屬性目標定義的上方放置方法聲明:

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

我知道這將是我會做了一些愚蠢 - 歡呼聲將嘗試它的明天 – Graham 2012-08-01 20:44:03

相關問題