【问题标题】:'Server is not declared' .net server.createobject error“未声明服务器”.net server.createobject 错误
【发布时间】:2013-03-13 03:28:45
【问题描述】:

我正在尝试将旧的 VB6 文件转换为 VB.net(我以前从未使用过)... 我在这一行遇到错误:

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

'未声明服务器'

我有:

导入 System.Web

在顶部 - 我认为这让我可以访问 Server.CreateObject???

【问题讨论】:

  • 哦,伙计,Server.CreateObject 带回了我第一份工作时对 ASP Classic 和 VB6 开发的(大部分是糟糕的)回忆。我不羡慕你需要移植这个的情况。祝你好运
  • 您知道 JMail 有一个 .net 版本,可以让您使用更多惯用的 .net 代码dimac.net/default2.asp?M=Products/MenuDOTNET.asp&P=Products/…

标签: vb.net


【解决方案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 库。

【讨论】:

  • Activator.CreateInstance 怎么样? msdn.microsoft.com/en-us/library/…(完整的声明,我没有可以测试这是否有帮助的环境,只是谷歌搜索)
  • @JasonSperske - 当然,但您仍会调用InvokeMember 等等,因为编译器无法解析类型信息。代理实现将在内部完成所有这些工作,而 typelib 导入器将为您生成所有这些代码。
  • 正确性已恢复,庆幸没有添加生产中遗留代码过多的问题:)
  • 我正在尝试读取 pop 邮件服务器...?关于如何不使用 JMAIL 的任何建议,因为这不起作用。
  • @tree - 最好的解决方案是升级到 .NET 版本的 JMail :) 相信我,尝试在 .NET 代码中使用 ActiveX/COM 库是不是 有趣。除非你是专家,或者有人欠你一个人情,否则我不会这样做。
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 2012-10-08
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2019-12-07
  • 2017-02-10
  • 2016-04-10
相关资源
最近更新 更多