Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试将包注册到COM_C#_.net_Dll_Regasm - Fatal编程技术网

C# 正在尝试将包注册到COM

C# 正在尝试将包注册到COM,c#,.net,dll,regasm,C#,.net,Dll,Regasm,我正在使用regasm将我的.dll(源自下面的.cs)注册到Windows COM。它返回一个警告,指出没有要注册的类型。我认为这是因为并非所有依赖项都有默认构造函数;但在改变之后,我遇到了同样的问题。 我的问题是,我是否需要在类中明确定义任何声明它将用作COM对象的内容?如果不是,我会错在哪里 以下是其中一个类(主类)的最小子集: 公共类AlmREST { //声明: 私有字符串服务器; 私有字符串域; 私人字符串项目; 私有字符串用户名; 私有字符串密码; // 私有字符串系统; // 分

我正在使用
regasm
将我的
.dll
(源自下面的
.cs
)注册到Windows COM。它返回一个警告,指出没有要注册的类型。我认为这是因为并非所有依赖项都有默认构造函数;但在改变之后,我遇到了同样的问题。 我的问题是,我是否需要在类中明确定义任何声明它将用作COM对象的内容?如果不是,我会错在哪里

以下是其中一个类(主类)的最小子集:

公共类AlmREST
{
//声明:
私有字符串服务器;
私有字符串域;
私人字符串项目;
私有字符串用户名;
私有字符串密码;
//
私有字符串系统;
//
分配给的私有字符串;
私人字符串负责;
私有字符串相位;
私有字符串测试器;
//
私有字符串sID;
//客户端/会话状态:
私有HttpClient;
私人厨师容器厨师;
私有HttpRequestHeaders主标头;
//
私钥;
非公开会议;
私有Cookie会话密钥;
私有Cookie XSRFtoken;
私人用户;
//违约\/
公共图书馆
{
sID=Environment.MachineName;
}
公共AlmREST(String[]authent、String sys、String[]tester)
{
服务器=authent[0];
domain=authent[1];
project=authent[2];
用户名=authent[3];
密码=authent[4];
系统=系统;
assignedTo=测试仪[0];
相位=测试仪[1];
testEnv=测试仪[2];
负责=用户名;
schrodID=Environment.MachineName;
启动();
}
//对于COM/JNI
公共无效设置(字符串s、字符串d、字符串pr、字符串u、字符串p)
{
服务器=s;
域=d;
项目=pr;
用户名=u;
密码=p;
启动();
}
私有void启动()
{
//@TODO(稍后):了解如何派生HTTPS的SSL证书
//handler.Credentials=getSSLCert();
cookieJar=新CookieContainer();
HttpClientHandler handler=新的HttpClientHandler();
handler.CookieContainer=cookieJar;
客户机=新的HttpClient(处理程序);
client.BaseAddress=新Uri(服务器);
mainHeaders=client.DefaultRequestHeaders;
//删除标题
main headers.Clear();
}
//很多方法(省略)
//代表\/他们可能有问题吗?
内部委托实体工厂(字符串entitiesType,参数KeyValuePair[]定义);
内部委托实体子类型查询(字符串子类型、参数KeyValuePair[]值);
内部委托实体提取器(字符串字段、对象值、实体);
内部委托bool LockSelf(字符串id、字符串entitiesType);
内部委托bool UnlockSelf(字符串id、字符串entitiesType);
内部委托bool DeleteSelf(字符串id、字符串EntiteType);
内部委托bool AmmendProperty(字符串id、字符串EntityType、参数KeyValuePair[]AMMENDENTS);
内部委托列表继承器();
}
现在,方法从我定义的对象模型调用,所有这些类也都有默认构造函数。
如果您需要更多信息,请让我知道,我遗漏了这些方法,因为它们有20多种。谢谢。

我想问题出在你们班上。根据MSDN中的示例COM类。 类必须遵循某些规则才能显示COM:

向COM公开Visual C#对象需要声明类接口、事件接口(如果需要)以及类本身。类成员必须遵循以下规则才能对COM可见:+ 该类必须是公共的

  • 属性、方法和事件必须是公共的
  • 属性和方法必须在类接口上声明
  • 事件必须在事件接口中声明
类中未在这些接口中声明的其他公共成员对COM不可见,但对其他.NET Framework对象可见


@AntonSemenov我已经为我希望作为COM元素导出的每个类创建了接口,但是我仍然收到相同的错误。您是否用
Guid
属性注释了您的类和接口?这是我们工作的重要组成部分implementation@AntonSemenov我怎么可能知道GUID是什么?这是为类和接口新生成的GUID。GUID对于每个类和每个接口都应该是唯一的。如何生成它取决于您,例如,您可以使用VisualStudio工具->创建guid附带的guid生成器。只需生成一个新的并将其放入GUID属性中。在注册表Ayyyyy中注册COM对象需要此GUID。。。。太难了,算了吧
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();
}