2017-07-28 67 views
1

我正在使用regasm將我的.dll(從下面的.cs派生)註冊到Windows COM。它返回一個警告,指出沒有要註冊的類型。我認爲這是因爲並非所有的依賴項都有默認的構造函數;但是變更後我也遇到同樣的問題。 我的問題是我需要在我的類中明確指出它將用作COM對象嗎?如果不是,我會在哪裏出錯?正在嘗試註冊包到COM

這是其中一個類(主要的)的最小子集:

public class AlmREST 
{ 
    //State: 
    private String server; 
    private String domain; 
    private String project; 
    private String username; 
    private String password; 
    // 
    private String system; 
    // 
    private String assignedTo; 
    private String responsible; 
    private String phase; 
    private String testEnv; 
    // 
    private String sID; 

    //client/session state: 
    private HttpClient client; 
    private CookieContainer cookieJar; 
    private HttpRequestHeaders mainHeaders; 
    // 
    private Cookie LWSSOkey; 
    private Cookie QCsession; 
    private Cookie sessionKey; 
    private Cookie XSRFtoken; 
    private Cookie almUser; 

    //DEFAULT\/ 
    public AlmREST() 
    { 
     sID = Environment.MachineName; 
    } 

    public AlmREST(String[] authent, String sys, String[] tester) 
    { 
     server = authent[0]; 
     domain = authent[1]; 
     project = authent[2]; 
     username = authent[3]; 
     password = authent[4]; 

     system = sys; 

     assignedTo = tester[0]; 
     phase = tester[1]; 
     testEnv = tester[2]; 

     responsible = username; 
     schrodID = Environment.MachineName; 

     startUp(); 
    } 

    //For COM/JNI 
    public void setup(string s, string d, string pr, string u, string p) 
    { 
     server = s; 
     domain = d; 
     project = pr; 
     username = u; 
     password = p; 
     startUp(); 
    } 

    private void startUp() 
    { 
     //@TODO(later): find out how to derive SSL-cert for HTTPS 
     //handler.Credentials = getSSLCert(); 
     cookieJar = new CookieContainer(); 

     HttpClientHandler handler = new HttpClientHandler(); 
     handler.CookieContainer = cookieJar; 
     client = new HttpClient(handler); 
     client.BaseAddress = new Uri(server); 
     mainHeaders = client.DefaultRequestHeaders; 
     //erase headers 
     mainHeaders.Clear(); 
    } 

    //Lots of methods (omitted) 

    //Delegates\/ could they be a problem? 
    internal delegate Entity Factory(String entitiesType, params KeyValuePair<String, object>[] definition); 
    internal delegate Entities SubTypeQuery(String subTypes, params KeyValuePair<String, object>[] values); 
    internal delegate Entity Extractor(String field, object value, Entities entities); 
    internal delegate bool LockSelf(String id, String entitiesType); 
    internal delegate bool UnlockSelf(String id, String entitiesType); 
    internal delegate bool DeleteSelf(String id, String entitesType); 
    internal delegate bool AmmendProperty(String id, String entitiesType, params KeyValuePair<String, object>[] ammendments); 
    internal delegate List<Delegate> Inheritor(); 
} 

現在,這些方法從對象模型定義我打電話,所有這些類都有缺省構造函數了。 更多您需要的信息請讓我知道,我忽略了方法,因爲有超過20個。謝謝。

+0

換各班我要導出爲COM元素@AntonSemenov我做了接口,但我仍然得到同樣的錯誤。 – Olivier10178

+0

你註釋過你的類和接口嗎?'Guid'屬性?這是實施的重要部分 –

+0

@AntonSemenov我怎麼可能知道GUID是什麼? – Olivier10178

回答

1

我覺得問題出在你上課。根據MSDN的示例COM類。 類必須遵循一些規則是COM可見:

暴露的Visual C#對象COM需要聲明一個類接口,事件接口如果需要,和類本身。班級成員必須遵守以下規則才能看到COM:+ 班級必須是公開的。

  • 屬性,方法和事件必須是公共的。
  • 必須在類接口上聲明屬性和方法。
  • 事件必須在事件接口中聲明。

在這些接口中沒有聲明的類中的其他公共成員對於COM來說是不可見的,但它們對其他.NET Framework對象是可見的。

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/example-com-class