2013-03-12 35 views
0

我想将一个旧的VB6文件转换为一个VB.net(我从来没有用过)一个... 我得到一个错误这条线:'服务器没有声明'.net server.createobject错误

Dim JMail As Object 
JMail = Server.CreateOBject("JMail.Message") 

'服务器未声明为'

我:

进口的System.Web

在t他顶部 - 我认为给我访问Server.CreateObject?

+1

哦,“Server.CreateObject”在我的第一份工作中带回了ASP Classic和VB6开发(主要是坏的)记忆。我不羡慕你需要将这个过渡的情况。祝你好运 – 2013-03-12 17:36:38

+0

你知道JMail有一个.net版本,它可以让你使用更多的惯用.net代码http://www.dimac.net/default2.asp?M=Products/MenuDOTNET.asp&P=Products/JMaildotnet/ start.htm – 2013-03-12 18:14:51

回答

1

.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库。

+0

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

+0

@JasonSperske - 当然,但你仍然会调用'InvokeMember',而不是,因为编译器无法解析类型信息。代理实现将在内部完成所有这些工作,并且typelib导入器将为您生成所有代码。 – 2013-03-12 17:47:45

+0

正确性得到了恢复,我很高兴我没有添加到生产中的遗留代码太多的问题:) – 2013-03-12 18:51:49