问题标签 [vb6-migration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1932 浏览

c# - 将 C(不是 C++)转换为 C#

我有一些旧的 C 32 位 DLL,它们使用 Oracle 的 Pro C 预编译器库 (proc.exe) 向更旧的 VB6 GUI 公开大约 sproc/func 调用,该 GUI 通过显式 Declare 语句引用这些函数,如下所示:

C 头文件中的所有结构都在 VB6 前端中精心复制。至少 SQL 是预编译的。

我的问题是,是否值得尝试将 .Net 接口(通过转换为程序集)强加到 C 代码上并将 VB6 升级到 C#,或者你认为我应该放弃整个事情并从头开始。与往常一样,时间至关重要,因此我呼吁以前的经验。我知道如果我将声明保留在 .Net 中,我将不得不添加许多我想避免的复杂编组装饰。

我以前从来没有将 C 转换为 .Net,所以我的主要问题是,如果其他所有内容都被忽略,是否有任何移植限制使这种做法不可取?

0 投票
2 回答
2523 浏览

vb.net - VB6 转换为 VB.net 变体问题

我的任务是将 VB6 程序转换为 VB.NET。在我的在线研究中,每个人似乎都说我需要检查我的代码并摆脱我拥有的任何变体。到目前为止,我的运气很好,但是我在更换这个时遇到了问题。

我对 VB(6 或 .net)仍然很陌生,我很难找到替代方案。VB.net 中的转换工具能很好地处理这个问题吗?还是我需要改变这个?如果我这样做,是否有更好的选择?原谅我的菜鸟。

先感谢您。

0 投票
2 回答
2115 浏览

c# - 将 CDate(long) 从 VB6 移植到 C#

我的任务是将旧的 VB6 程序转换为 C#。我在移植时遇到问题的一个功能是从从二进制文件读取的文件中计算出生日期:

我能找到的唯一类似的功能是:

但是ToDateTime(long)只返回一个InvalidCastException.

现在我可以手动构建字符串,但在 VB6 的任何地方都找不到任何文档CDate(long)

我究竟做错了什么?

0 投票
2 回答
1188 浏览

vb.net - 如何在 VB.NET 中访问变量地址

我必须将旧版 VB6 应用程序升级到 VB.NET;此应用程序使用来自 .dll 的函数调用,该函数将内存地址作为其参数之一。VB6 应用程序使用 VarPtr() 函数执行此操作,但 .NET 中不存在此函数。如何在 .NET 中检索变量的内存位置?

-编辑1

例如

-编辑2

确切的函​​数调用在名为 FTD2XX.DLL 的 DLL 中,确切的调用是

0 投票
3 回答
4372 浏览

c# - 将 dllimport 从 vb6 转换为 c# 3.5

我在 VB6 中有一些从 dll 导入函数的代码,它使用 byVal 和 byRef 关键字,我想将该代码转换为 C# 3.5。

  1. 字符串的unicode编码会有问题吗?

  2. 我是否将 vb6 中的“byRef”变量声明为 C# 代码中的“ref”变量?

  3. 它将返回值输入到由 VB6 代码作为“byVal”参数发送的字符串中,这是如何工作的,如果你想允许函数编辑字符串,你不应该发送东西“byRef”吗? 这个概念仍然适用于我的 C# 代码吗?

我尝试从 VB6 处理函数声明,参数类型只是 int、long 和 string。在有“byVal”关键字的地方,我只是将其留空,并用 C# 中的“ref”关键字替换了“byRef”关键字,代码不起作用。

VB6 代码:

我的 C# 3.5 翻译:

请帮忙,我已经花了一整天的时间:p....

最后,我使用自动项目转换器(从 VB6 到 VB.NET 2008)将函数调用转换为 VB.NET 库,并使用 C# 引用调用它。

谢谢。

0 投票
4 回答
762 浏览

.net - 将旧版 VB6 函数调用转换为 .NET 的实用程序

我正在寻找一种实用程序/工具来将对遗留 VB6 函数的调用转换为 .NET 等效函数。

例如,它会转换这个......

对此...

有人知道吗,还是我必须自己动手?

0 投票
3 回答
12131 浏览

excel - 将 vba 转换为 vb6 并创建 .dll - 操作方法 - 提示、提示和风险

我应该将大量用 VBA (Excel) 编写的代码转换为 VB6。但我真的不知道我必须照顾什么或从哪里开始。因此,如果能从 VB6 专家那里得到一些提示,那就太好了。

我已经安装了 MS Visual Studio 并玩了一下。但我不是 VB6 专家,也不知道我必须做什么。

最终目标是将当前放置在一个 excel vba 宏中的所有 VBA 代码放入 VB6 项目中,并从中创建一个 .dll。这个 .dll 应该被 excel 引用,并且 excel 应该像现在一样运行 :-)

例如,我必须做什么才能将此 vba 代码转换为 VB6。

编辑:是的,如果可以将 vba 代码转换为 .dll 也可以。然后我就不必转换代码了。但我认为只能用 vb6 代码创建一个 .dll。

0 投票
3 回答
4915 浏览

vb.net - 如何获得打印机 HDC

我有一个用 C++ 编写的具有打印功能的 COM 组件。此打印功能将打印机 hDC 作为参数,其中包括用于打印的所有设置。以前,这是从 VB6 代码调用的,并且Printer.hdc在设置对象上的所有内容后将在这里工作Printer

代码从 VB6 转换为 VB.NET,我已经弄清楚了我需要做的大部分事情。旧的 Printer 对象可通过Microsoft.VisualBasic.PowerPacks.Printing.Compability.VB6.Printer该类获得,但hdc这里不支持旧的属性。

谁能告诉我如何获得这个hdc?这个 hdc 与对象GetHdevmode()上的相同吗?System.Drawing.Printing.PrinterSettings

0 投票
9 回答
4004 浏览

.net - 如何将丑陋且未记录的 VB6 代码迁移到 .NET

我知道已经有关于 VB6 迁移的问题,但是我项目的代码库在这里带来了一些新问题。

我不得不说代码质量、结构和架构简直就是一场噩梦。有 2 个大项目:Nr.1 有 40 个表单、40 个模块和一些类文件,这个 EXE 是一种“基础系统”。Nr.2 有 80 个表格,20 个模块和一些类文件,这个 EXE 调用函数形成了“基础系统”。然后还有大约 10 个其他带有 GUI 的项目(每个 1-3 个表单)和另外 90 个非 GUI 项目,其中大部分是 EXE 文件,一些 DLL。DLL 是用 C、C++ 和 VB6 编写的。

代码自 10 年以来不断发展,并且一次主要由 1 个(糟糕的)开发人员编写。

  • 具有 500 行(甚至更多)的函数非常常见。
  • 90% 的 GUI 组件被命名为 text1, command2(1), …
  • 复制和粘贴无处不在,例如复制了一个包含 5000 行代码的 EXE 项目(没有 GUI),副本中唯一的变化是通过邮件而不是 FTP 发送文件(同一个项目还有 2 个另外的副本)。
  • 我曾经有一个小表格(15 个字段),我应该解决一个小问题(通常最多半小时),每次我更改某些内容时,它要么不起作用,要么在表格中产生新的错误。2 天后,我决定彻底重写表格,从旧表格中的约 20 条 SQL 语句中,只有 2 条在新表格中幸存下来。
  • 甚至不要询问代码中的注释……</li>

几个月前我接手了这个项目,我是唯一的维护者。变更请求和错误的流量持续(但很少),我们从客户那里获得维护预算,以保持软件运行并在法律要求方面“保持最新”。

我的选择

1) 从头开始​​重写——在这种情况下,我可以用 Java 编写它以实现可移植性。这里的问题是除了一些(旧的)用户帮助之外,没有文档,所以丑陋的代码就是“文档”。有一个人有高层知道软件应该怎么做。此外,很难说服管理层这样做,即使从长远来看可以节省大量成本,也存在政治问题。我也不能一次做一个(vb)项目,因为数据库结构并不比代码好,即也必须从头开始。所以我只能一次更改整个软件。

2)首先将代码迁移到主要项目的 VB.NET / C# 迁移,我已经对其进行了测试,并从 Project Nr.1 中获得了约 2000 条升级评论,其中大部分内容如 Screen.MousePointer 已更改,具有变体返回值的函数和很快。我的想法是在转换之后,为 DB 抽象创建类,更改代码以使用这些类并进行重构,迁移和更改其他项目,当所有代码都使用 DB 类时,更改 DB 结构。

3) 无论如何我必须在 VB6 中更改某些内容时重构代码(我已经部分地这样做了),并在某些时候重构其余部分。这样更容易看到原始功能,因为它是原始代码,当出现错误时,很明显它们不可能是迁移的结果。当代码被重构时(我假设它也会小 50-75%),将它迁移到 .NET 会更容易。然后更改数据库结构(然后进行另一轮重构……)。

未来有一些更大的改变要做(使其与 Win7 兼容,以及另一个影响大部分代码的大 CR),所以会有一个很好的机会来做这些改变,因为我必须经历反正很多代码。

我的问题是谁有迁移糟糕、丑陋的代码的经验/提示?您会建议哪些选项?

0 投票
5 回答
8068 浏览

.net - VB6格式功能:.NET中的模拟

有一个String.Format函数在文档中被称为FormatVB6 的模拟函数。还有Format来自VisualBasic命名空间的功能是为了兼容性而提供的,并且基本上具有与String.Format.

事实上,这两种格式的日期和数字。

但是 VB6 的函数也可以格式化字符串:

String.Format就我而言,无法做到这一点,新的Format. 我在兼容性文档中也找不到任何提及FormatVB6 功能的某些部分丢失的信息,似乎该功能已被“默默地”弃用。

框架中有什么可以做这种格式的吗?