标签: vb6-migration

从VB6.0升级的最佳开发工具

我打算将大型vb6应用程序升级到.net.该项目使用许多第三方组件,例如VSFlexGrid以及水晶报告.它还使用源代码不可用的旧VB6 dll.我的问题是

  1. 我应该将源转换为C#还是VB.net足够强大?对于不受支持或使用不安全/过时技术的第三方组件,我该怎么办?

我欢迎任何以前做过这件事的人提供任何有用的意见.

.net vb6 vb6-migration

5
推荐指数
1
解决办法
6045
查看次数

VB6转VB.net转换

完全重复:将应用程序从VB6移动到VB.Net的最佳策略
完全重复:VB6的转换工具比较

任何人都可以告诉将vb6转换为vb.net的工具

谢谢dagg

vb.net vb6 vb6-migration

5
推荐指数
1
解决办法
6万
查看次数

Err.Number(VB6与C#)

我已经使用Artinsoft的VB6到.NET向导将VB6应用程序转换为C#,并且我在以前使用过Err.Number的任何地方都收到了升级警告.

// UPGRADE_WARNING:(2081)Err.Number有一个新的行为.

转换后的代码是指;

Microsoft.VisualBasic.Information.Err().Number
Run Code Online (Sandbox Code Playgroud)

我没有运气,找出差异是什么.有谁知道它可能是什么,或者忽略这个警告是否安全?

UPDATE

对于任何在将来偶然发现这个问题的人 - 一句警告; 在C#.NET应用程序中继续使用Err.Number是不安全的.该属性仍然可用,但是在错误发生后没有按预期填充.如果错误来自COM组件,则唯一可以按预期填充它的情况.

正常错误,例如DB访问,IO操作等不会给Err().Number赋值,因此不幸的是它的使用必须重构.

奇怪的是,在VB .NET中,它仍然按预期工作,因此在决定转换的目标语言时,可能需要记住这一点.

.net vb6-migration

5
推荐指数
1
解决办法
3647
查看次数

我可以只使用COM功能吗?(与<Runtime.InteropServices.ComVisible(False)>相反)

我在我的VB.NET DLL中有一些功能,我可以通过使用以下内容从我的VB6应用程序"隐藏":

<Runtime.InteropServices.ComVisible(False)> _
Run Code Online (Sandbox Code Playgroud)

但有没有办法让COM客户端只能看到一个函数,而不是.NET程序集?

这样我可以在.NET端使用共享方法,避免了实例声明的需要.

vb.net vb6 com com-interop vb6-migration

5
推荐指数
1
解决办法
960
查看次数

将VB6模块转换为VB.NET

我几乎完成了将模块从VB6转换为VB.NET,但是我遇到了以下2个引号的问题,我想知道是否有任何方法可以解决这个问题:

Structure AUDINPUTARRAY
    bytes(5000) As Byte
End Structure
Run Code Online (Sandbox Code Playgroud)

我正在尝试将该字节行更改为:Dim bytes(5000)as Byte,但它不允许我在结构中定义大小.


这是第二个:

Private i As Integer, j As Integer, msg As String * 200, hWaveIn As integer
Run Code Online (Sandbox Code Playgroud)

我不知道如何转换:msg As String*200

vb.net vb6 vb6-migration

5
推荐指数
1
解决办法
1325
查看次数

调整3D阵列的大小

我试图在C#中调整3D数组的大小.

VB6代码如下:

ReDim Combos(ProductNum, 4, 3)
Run Code Online (Sandbox Code Playgroud)

由于我不能Array.Resize用于3D数组,我还有另一种方法可以在C#中执行此功能吗?

我已经将数组声明为3D数组:

int[ , , ] Combos;
Run Code Online (Sandbox Code Playgroud)

但我无法调整大小.有任何想法吗?

c# vb6 visual-studio-2010 vb6-migration

5
推荐指数
1
解决办法
1238
查看次数

相当于visual studio 2012 vb.net中的getobjectcontext()?

我有一个vb6 COM对象,我正在转换为VB.Net 2012

我的示例代码如下所示:

Dim ObjContext ,objx ,objy As Object

Dim Rs As ADODB.Recordset

Set ObjContext = GetObjectContext

Set objx =ObjContext.CreateInstance("abc.class1")

Set Objy = ObjContext.CreateInstance("abcde.class2")


Set Rs = objx.getvalue(query)

 If Rs.EOF And Rs.BOF Then

      ObjContext.SetAbort
        Set objx = Nothing
        Set ObjContext = Nothing
        Set Objy = Nothing

  End If
Run Code Online (Sandbox Code Playgroud)

VB 2012中GetObjectContext()和createinstance()的等价物是什么?

我怎样才能从.net中删除这个概念?

c# vb.net vb6 vb6-migration visual-studio-2012

5
推荐指数
1
解决办法
1359
查看次数

Excel VBA ADODB后期绑定错误

实际上,每次我使用Early绑定代码来使用ADODB Connection时,但是现在我想使用Late Binding Code。据我看来,代码似乎是完美的,但我却不知道如何得到错误,例如“参数类型错误,超出可接受范围或彼此冲突”。

Sub Test()
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.RecordSet")
cn.Open "Provider=Microsoft.JET.Oledb.4.0;Data Source=Y:\Operational Non Sensitive\Avon UK\UK Voice Productivity\UK AHT Report_.mdb"
rs.Open "Table1", cn, adOpenDynamic, adLockOptimistic
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba vb6-migration

5
推荐指数
1
解决办法
2059
查看次数

封送 ComVisible 组件可变参数数组参数

我正在考虑将一些用 VB6 编写的遗留 COM 代码迁移到 .NET,但这需要生成一个与原始代码相当接近的类型库。

在早期绑定到其他 VB6 组件时,我遇到了传递参数数组的问题。在最初的 VB6 中,签名如下所示:

Public Function ExecSPReturnRS(ByVal strProcAs String, _
            ParamArray varParams() As Variant) As Recordset
Run Code Online (Sandbox Code Playgroud)

并生成如下所示的 MIDL:

[id(0x60030009), vararg]
HRESULT ExecSPReturnRS([in] BSTR strProc,
                       [in, out] SAFEARRAY(VARIANT)* varParams,
                       [out, retval] _Recordset** );
Run Code Online (Sandbox Code Playgroud)

使用 C#,我无法确定生成相同 MIDL 的正确声明。我要么缺少vararg声明,要么 varParams 参数被声明为而SAFEARRAY(VARIANT)不是SAFEARRAY(VARIANT)*.

因此,如果在 C# 中我声明为:

Recordset ExecSPReturnRS(string storedProc, ref object[] arguments);
Run Code Online (Sandbox Code Playgroud)

...我明白了SAFEARRAY(VARIANT)*,但没有vararg。但是如果我声明为

Recordset ExecSPReturnRS(string storedProc, params object[] arguments);
Run Code Online (Sandbox Code Playgroud)

...然后我得到了vararg但 SAFEARRAY 未声明为引用。

我希望这MarshalAsAttribute可能是可行的方法,但到目前为止我能想到的最好方法是:

Recordset …
Run Code Online (Sandbox Code Playgroud)

c# vb6 com-interop vb6-migration

5
推荐指数
1
解决办法
426
查看次数

“UPGRADE_WARNING:Mod 有新行为”指的是什么?

我必须使用旧的 VS2008 转换工具将一些 VB6 代码转换为 VB.net。当不确定原始代码和转换后的代码是否等效时,该工具可以帮助插入警告注释。其中一个例子是:

UPGRADE_WARNING:Mod 有新行为

单击了解更多信息:'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"'

ms-help://...据我所知,这个“链接”不再起作用。我也无法在网络上找到任何引用该链接的内容。

这个警告实际上指的是什么?功能上有什么区别mod

.net vb6 vb6-migration

5
推荐指数
1
解决办法
130
查看次数