我有一个VB5(非.net)项目,我想升级到ac #project.有没有人对方法或免费工具有任何建议,可以帮助我解决这个问题.
谢谢
布拉德
在将VB6代码转换为VB.NET的过程中,我需要替换以下代码,这些代码旨在关闭应用程序中剩余的所有打开的表单.
'close all sub forms
For i = My.Application.OpenForms.Count - 1 To 1 Step -1
'UPGRADE_ISSUE: Unload Forms() was not upgraded. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="875EBAD7-D704-4539-9969-BC7DBDAA62A2"'
Unload(My.Application.OpenForms(i))
Next i
Run Code Online (Sandbox Code Playgroud)
我Unload用Close(用TFM表示)替换了函数,但是编译器抱怨它OpenForms不是.的成员My.Application.
我在哪里可以访问开放表格?
在我的VB 6.0代码中,我声明有以下行:
Attribute VB_Name = "MyFile"
Run Code Online (Sandbox Code Playgroud)
但是,在VB.NET中,我收到错误"期待声明".这不是宣言吗?找到VB.NET和VB 6.0之间的差异有很好的参考吗?
我正在研究一些传统的VB5/VB6代码,需要将".bas"文件转换为vb.net.
我找到了几个选择
将.bas文件编译为com dll,然后引用并在我的项目中使用它.(对于这个我想我需要vb5或vb6,我没有我可以使用)
将文件的内容复制并粘贴到vb.net中的新模块中,然后逐个尝试解决错误.
.bas文件的内容引用了一个特定的dll..bas文件主要包含声明consts,类型,子和函数.
在vb.net中重做这个最优雅的方法是什么.它是否与选项2一样简单.
编辑
我使用VS2008 express并通过升级向导运行代码,它进行了必要的转换.并且.bas文件已转换为.vb.我拿了那个文件并决定重写代码的其他部分,包括重新转换的.vb文件.
与此相关的其他问题在这里.
我有一个VB6项目.我的问题是我可以调用具有项目所有业务规则的.NET .dll(来自VB6应用程序)吗?
基本上我有一个VB6项目与一个经典的ASP项目调用vb6/ActiveX .dll.要求是找出升级应用程序的最佳方法.所以,如果我更新ActiveX .dll,VB6应用程序可以调用新的.NET .dll吗?
我想同样的问题对于经典ASP项目也是可行的......
谢谢!
我注意到VBA/VB6 TabStrip控件允许在其页面中克隆其子节点的实例.我正在查看一个旧的VBA项目,它有一个tabtrip,幕后它只是添加页面,控件是自动复制的,但可以有不同的数据源.
有什么方法可以在VB.NET中复制它吗?
我目前有一个选择案例,它将从记录集中读取名称字段,以及从该记录集中读取一个布尔值,该值假定是否将该字段包含在稍后将生成的报告中.
问题是,在VB6中,你能够为ListBox.Selected(i)分配一个布尔值.
现在,我不能为我的生活弄清楚要分配什么,选择或不选择依赖于记录集中的布尔值的字段.
码:
Do Until rs_1.EOF
'Until we run out of records ...
str_FieldName = rs_1.Fields("FieldName").Value
b_IncludeField = rs_1.Fields("IncludeInBatchReport").Value
Select Case str_FieldName
Case "Sequence"
listbox_Fields.Items.Add("Sequence")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "BldgNo"
listbox_Fields.Items.Add("BldgNo")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "BldgName"
listbox_Fields.Items.Add("BldgName")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "BldgFunc"
listbox_Fields.Items.Add("BldgFunc")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "POC"
listbox_Fields.Items.Add("POC")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "Phone"
listbox_Fields.Items.Add("Phone")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case "AH_Phone"
listbox_Fields.Items.Add("AH_Phone")
listbox_Fields.SelectedItem(listbox_Fields.Items.Count - 1) = b_IncludeField
Case …Run Code Online (Sandbox Code Playgroud) 在我们中我们使用了user32.dll并传递了hWnd.So的值.我想知道这个User32.dll有什么用,并传递值hWnd?
他们正在设置此值
SetProp hwnd, "PrevWndProc", SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
Run Code Online (Sandbox Code Playgroud) 我知道在循环的上下文To中i = long1 To long2,VB中的等价(i = long1; i < long2; ++i)于C#,但我试图在上下文中找到它的等价物ReDim/System.Array.Resize():
VB6:
ReDim indexCorr(LBound(fDefMatchs) to UBound(fDefMatchs)
C#:
System.Array.Resize(indexCorr, ***?)
有没有其他人知道如何使用一系列这样的数字在C#中调整数组大小?
我正在从VBA加载一些旧的VB函数,并且大多数都已经更新到VB.NET,但是"wininet.dll"中的函数的函数声明似乎没有正确匹配.
我得到的错误是:
抛出异常:托管调试助手,'PInvokeStackImbalance':...
它的长短是声明的参数的长度需要是显式的,并且它与dll中的实际函数不匹配.
我看了这个,我可以通过删除支票来获得,但它会产生"堆栈不平衡",并且随着时间的推移最终会耗尽所有堆栈.此外,这些被称为"非托管"dll,并且已经在http://pinvoke.net上的PInvoke函数wiki上提出了一些声明.这个wiki确实有一些我正在使用的函数调用,但不是全部.其中一些我不得不猜测一些事情,但没有成功.
我从旧代码中复制的大部分更改都是从更改long为int32或integer更改为IntPtr旧代码中从未使用过的更改.我假设这会使所有整数大小正确(即16/32/64位),这可能是大多数问题所在.但是,有一种情况是改变long了string(),这看起来有点奇怪而且没有编译好.
那么,我如何实际查找dll中的函数长度并匹配API?
我查了几件事,但当我尝试在Visual Studio中添加对c:\ windows\system32\wininet.dll的引用到我的VB.NET项目时,它说我无法添加它.这似乎阻止我在Visual Studio中使用Object或Assembly浏览器.它似乎不是COM对象.这里有什么帮助?
作为参考,这是失败的旧代码:
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal Agent As String, ByVal AccessType As Long, ByVal ProxyName As String, _
ByVal ProxyBypass As String, ByVal Flags As Long) As Long
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, ByVal ServerName As String, ByVal ServerPort As …Run Code Online (Sandbox Code Playgroud)