我有一个非常大的VB6代码库,有大量的第三方控件.想将其移至.NET.重写它是不可能的 - 客户认为没花钱去做同样的事情.使用内置升级向导迁移到.NET基本上是不起作用的.
有没有人从http://www.vbmigration.com/尝试过VB迁移合作伙伴. 如果是这样,有什么样的体验?
有一个String.Format函数在文档中被称为FormatVB6 函数的模拟。还有Format来自VisualBasic命名空间的函数是为了兼容性而提供的,并且基本上具有与String.Format.
事实上,这两种格式的日期和数字。
但是 VB6 的函数也能够格式化字符串:
? format$("hi there", ">")
HI THERE
? format$("hI tHeRe", "<")
hi there
? format$("hi there", ">!@@@... not @@@@@")
HI ... not THERE
Run Code Online (Sandbox Code Playgroud)
String.Format就我而言,无法做到这一点,新的Format. 我在兼容性Format文档中也找不到任何提及VB6 功能的某些部分丢失的内容,似乎该功能已被“悄悄地”弃用。
框架中有什么东西可以进行这种类型的格式化吗?
VB6应用程序与.NET平台的结合几乎就像重写一样,无论是VB.NET还是C#.与.NET平台相比,您是否认为在Java平台上进行此操作需要更多的努力,因为它无论如何都是重写?请分享你的想法!
我继承了使用VB6编写的Outlook 2003 COM加载项(注意:NOT VB.NET).
我需要升级它以使用Outlook 2010.是否可以使用VB6为Outlook 2010创建加载项,或者我是否需要重新实现所有内容?
我有一个调用VB6 DLL的遗留VB6应用程序,我试图将VB6 DLL移植到C#而不触及主VB6应用程序代码.旧的VB6 DLL有一个接口通过引用接收VB6长(32位整数),并更新了该值.在我编写的C#DLL中,主VB6应用程序从未看到更新的值.它就像真正编组到C#DLL的内容一样,是对原始数据副本的引用,而不是对原始数据的引用.我可以通过引用成功传递数组,并更新它们,但单个值不行.
C#DLL代码看起来像这样:
[ComVisible(true)]
public interface IInteropDLL
{
void Increment(ref Int32 num);
}
[ComVisible(true)]
public class InteropDLL : IInteropDLL
{
public void Increment(ref Int32 num) { num++; }
}
Run Code Online (Sandbox Code Playgroud)
调用VB6代码看起来像这样:
Private dll As IInteropDLL
Private Sub Form_Load()
Set dll = New InteropDLL
End Sub
Private Sub TestLongReference()
Dim num As Long
num = 1
dll.Increment( num )
Debug.Print num ' prints 1, not 2. Why?
End Sub
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我需要做些什么来解决它?提前致谢.
我需要将VB6(我不熟悉)项目转换为C#4.0.该项目包含一些字符串验证的正则表达式.
我需要知道两种情况下的正则表达式是否相同,所以如果我只是将正则表达式字符串从VB6项目复制到C#项目,它们的工作方式是否相同?
我对正则表达式有一个基本的了解,我可以简单地阅读一下它的作用,但对于味道等,这一点在我的脑海中有点过头了.
例如,这两行是等价的吗?
VB6:
isStringValid = (str Like "*[!0-9A-Z]*")
Run Code Online (Sandbox Code Playgroud)
C#:
isStringValid = Regex.IsMatch(str, "*[!0-9A-Z]*");
Run Code Online (Sandbox Code Playgroud)
谢谢!
好的,所以我将VB6应用程序升级到VB.NET,我不确定如何对我正在构建的容器类的class_terminate组件进行现代化:
Private Sub class_terminate()
If Not (colUserMappings Is Nothing) Then
Set colUserMappings = Nothing
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
问题是.NET的等价物会.Finalize留下一些潜在的运行时错误,因为将容器的最终引用设置为空并不一定会破坏容器,因为.NET语言具有非确定性的终结.
在这种情况下,我将如何以一种调用其终止或终止函数实际上导致最终破坏容器的方式对集合类进行现代化?这有一个很好的解决方法吗?
升级后我将VB6升级到.NET我收到编译错误:
Name 'Printer' is not declared
Run Code Online (Sandbox Code Playgroud)
我在VB6中的代码是这样的:
THeight = Printer.TextHeight("#")
Run Code Online (Sandbox Code Playgroud)
在.NET中声明打印机的正确方法是什么?
注意:我尝试下载打印机电源组,但无法使其正常工作.
我有一个已迁移到 VB.net 的 VB6 应用程序,并且正在尝试将框架版本升级到 4.5 - 它抱怨 Microsoft.VisualBasic.Compatibility dll 中的所有内容都已过时。我能够相当轻松地替换除 FileListBox 和 DirListBox 之外的所有内容 - 虽然很乏味,但我不必创建任何新控件。
这些控件有相近的替代品吗?有谁知道它们是否已与框架的其余部分一起开源?
语境
我有一个使用这种特殊类型的vb6软件:
Type Example
A As Integer
B As Single
C As String * 10
D As Byte
E As String
End Type
Run Code Online (Sandbox Code Playgroud)
这个结构完全保存在一个带有简单“ put ”的二进制文件中:
Dim Numfile%
Numfile = FreeFile
[...]
Put #Numfile, , example_instance
[...]
Run Code Online (Sandbox Code Playgroud)
问题
现在我想从vb.net (.NET Framework 4)读取这个二进制文件。问题是在 .net 中我们没有固定的字符串......我试图写一些类似的东西:
Structure Example
Dim A As Short
Dim B As Single
Dim C() As Char ' ---> This should replace String * 10.
Dim D As Byte
Dim E As String
End …Run Code Online (Sandbox Code Playgroud) vb6-migration ×10
vb6 ×8
vb.net ×5
.net ×4
c# ×2
.net-4.5 ×1
c#-4.0 ×1
collections ×1
declare ×1
java ×1
migration ×1
outlook ×1
outlook-2010 ×1
printing ×1
regex ×1