我想将一个旧的VB6文件转换为一个VB.net(我从来没有用过)一个... 我得到一个错误这条线:'服务器没有声明'.net server.createobject错误
Dim JMail As Object
JMail = Server.CreateOBject("JMail.Message")
说'服务器未声明为'
我:
进口的System.Web
在t他顶部 - 我认为给我访问Server.CreateObject?
我想将一个旧的VB6文件转换为一个VB.net(我从来没有用过)一个... 我得到一个错误这条线:'服务器没有声明'.net server.createobject错误
Dim JMail As Object
JMail = Server.CreateOBject("JMail.Message")
说'服务器未声明为'
我:
进口的System.Web
在t他顶部 - 我认为给我访问Server.CreateObject?
.NET中并没有真正直接等价于Server.CreateObject
,因为所有内容都是强类型的,尽管您可以使用System.Type.GetTypeFromProgID
并使用InvokeMember
(Ick)调用各种方法。喜欢的东西:
Type proxyType = System.Type.GetTypeFromProgID("JMail.Message");
object proxy = Activator.CreateInstance(proxyType);
object result = proxyType.InvokeMember("MemberName",
// System.Reflection.BindingFlags
null,
proxy,
// An object array with your parameters for this call
);
最好的解决办法可能是在你的库create a COM wrapper,并在解决方案中引用它。
如果你可以提供一些关于你的代码到底是什么的更多细节,也许有人可以建议一种本地的方式来在.NET中实现它。例如,如果您只是想发送电子邮件或其他东西,那么在.NET中有一百多种方法可以做到这一点。
更新:刚刚得到JMail.NET,不再需要处理旧的ActiveX库。
Activator.CreateInstance怎么样? http://msdn.microsoft.com/en-us/library/d133hta4.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1(完全免责声明,我没有一个环境,我可以测试这是否会有所帮助,只是谷歌搜索) – 2013-03-12 17:41:56
@JasonSperske - 当然,但你仍然会调用'InvokeMember',而不是,因为编译器无法解析类型信息。代理实现将在内部完成所有这些工作,并且typelib导入器将为您生成所有代码。 – 2013-03-12 17:47:45
正确性得到了恢复,我很高兴我没有添加到生产中的遗留代码太多的问题:) – 2013-03-12 18:51:49
哦,“Server.CreateObject”在我的第一份工作中带回了ASP Classic和VB6开发(主要是坏的)记忆。我不羡慕你需要将这个过渡的情况。祝你好运 – 2013-03-12 17:36:38
你知道JMail有一个.net版本,它可以让你使用更多的惯用.net代码http://www.dimac.net/default2.asp?M=Products/MenuDOTNET.asp&P=Products/JMaildotnet/ start.htm – 2013-03-12 18:14:51