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可见:+ 该类必须是公共的
- 属性、方法和事件必须是公共的
- 属性和方法必须在类接口上声明
- 事件必须在事件接口中声明
@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();
}