1

好的,这是在黑暗中拍摄的,因为我已经束手无策了。我有两个在 VB6 中运行良好的第三方 DLL,但在 VB.NET 或 C# 中却没有那么多。

在 VB6 中,以下工作正常:

Dim oApplication As Object
Dim oSession As Object
Dim vRetCode As Variant

Set oApplication = CreateObject("OAPPLICA.OAPPLICA")
Set oSession = CreateObject("OSESSION.OSESSION")

oApplication.PROGRAMDRIVE = "\\dev\data\"
oApplication.WORKAREADRIVE = "\\dev\data\workarea\"
oApplication.DATADRIVE = "\\dev\data\"
oApplication.IMAGEDRIVE = "\\dev\data\image\"

oSession.MYAPPLICATION = oApplication
vRetCode = oSession.LOGIN("USER1", "PASSWORD1") 'Returns zero if successful

MsgBox (vRetCode)

当我在 VB.NET 中运行这组完全相同的代码时,我在“oSession.MYAPPLICATION = oApplication”行上得到“未找到成员。(来自 HRESULT 的异常:0x80020003(DISP_E_MEMBERNOTFOUND))”。

我也尝试在 VB.NET 和 C# 中进行早期绑定,但最终在不同的行上出现相同的错误。我在“oApplication.set_PROGRAMDRIVE("\\dev\lifepro\data\");”上得到了相同的错误 线。

private OAPPLICA.OAPPLICA oApplication = new OAPPLICA.OAPPLICA();
private OSESSION.OSESSION oSession = new OSESSION.OSESSION();
Int64 iReturnCode;

oApplication.set_PROGRAMDRIVE("\\\\dev\\data\\");
oApplication.set_WORKAREADRIVE("\\\\dev\\data\\workarea\\");
oApplication.set_DATADRIVE("\\\\dev\\data\\");
oApplication.set_IMAGEDRIVE("\\\\dev\\data\\image");

m_oSession.set_MYAPPLICATION(m_oApplication);
iReturnCode = Convert.ToInt64(m_oSession.LOGIN("USER1", "PASSWORD1"));

如前所述,这两个 DLL(OAPPLICA.dll 和 OSESSION.dll)是第三方的,并允许进入第三方遗留系统的入口点。由于它是遗留的,我无法再访问第三方,我的任务是尝试将现有的 Windows VB6 应用程序原型转换为 .NET Web 应用程序。我的预感是 .NET 在解释两个 COM 对象的互操作 DLL 时遇到问题,但我一直无法找到任何可以为我指明方向的东西。

4

3 回答 3

2

我的猜测是这段代码在 WinForms 应用程序中运行良好,你试过吗?

VB6 和大多数设计用于 VB6 的 COM 组件将要求您在 STA 线程上运行才能正常工作。您的 Web 代码可能在 MTA 线程上运行。

于 2012-06-22T13:50:31.427 回答
1

终于明白了。出于某种原因,.NET 在运行时将属性解释为只读(对于 C# 和 VB.NET 以及对于 web 和 windows),即使在设计时有 get 和 set 选项。VB6 在运行时和设计时都将属性解释为 get 和 set,所以你可以想象我的困惑。我以前从未遇到过这样的事情。无论如何,我开始在第三方 DLL 周围放置一个 VB6 包装器,然后让 .NET 引用 VB6 包装器 DLL。工作得很好,让我可以继续开发,但仍然想消除额外的 VB6 层。我们的一位 COBOL 开发人员最终能够模仿/重写旧版 DLL。我讨厌在这样的废话上浪费时间,但我很高兴它已经完成了。

于 2012-09-23T13:16:00.990 回答
0

如果@tcarvin 是正确的,而且他可能是正确的,您可以使用“AspCompat=true”页面指令强制 ASP.net 应用程序成为 STA - msdn.microsoft.com/en-us/library/zwk9h2kb.aspx

于 2012-06-22T14:16:50.850 回答