Vb.net 默认情况下,具有多个属性的vb6结构返回什么?

Vb.net 默认情况下,具有多个属性的vb6结构返回什么?,vb.net,struct,vb6,structure,Vb.net,Struct,Vb6,Structure,我正在将一个旧的VB6项目升级到.NET,在使用以下行时遇到了问题 CopyMemory(lpDevMode, DevMode, Len(DevMode)) Devmode是一个如下所示的结构: Public Structure DEVMODE_TYPE 'UPGRADE_WARNING: Fixed-length string size must fit in the buffer. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner

我正在将一个旧的VB6项目升级到.NET,在使用以下行时遇到了问题

CopyMemory(lpDevMode, DevMode, Len(DevMode))
Devmode是一个如下所示的结构:

Public Structure DEVMODE_TYPE
    'UPGRADE_WARNING: Fixed-length string size must fit in the buffer. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="3C1E4426-0B80-443E-B943-0627CD55D48B"'
    <VBFixedString(CCHDEVICENAME),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=CCHDEVICENAME)> Public dmDeviceName() As Char
    Dim dmSpecVersion As Short
    Dim dmDriverVersion As Short
    Dim dmSize As Short
    Dim dmDriverExtra As Short
    Dim dmFields As Integer
    Dim dmOrientation As Short
    Dim dmPaperSize As Short
    Dim dmPaperLength As Short
    Dim dmPaperWidth As Short
    Dim dmScale As Short
    Dim dmCopies As Short
    Dim dmDefaultSource As Short
    Dim dmPrintQuality As Short
    Dim dmColor As Short
    Dim dmDuplex As Short
    Dim dmYResolution As Short
    Dim dmTTOption As Short
    Dim dmCollate As Short
    'UPGRADE_WARNING: Fixed-length string size must fit in the buffer. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="3C1E4426-0B80-443E-B943-0627CD55D48B"'
    <VBFixedString(CCHFORMNAME),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray,SizeConst:=CCHFORMNAME)> Public dmFormName() As Char
    Dim dmUnusedPadding As Short
    Dim dmBitsPerPel As Short
    Dim dmPelsWidth As Integer
    Dim dmPelsHeight As Integer
    Dim dmDisplayFlags As Integer
    Dim dmDisplayFrequency As Integer
End Structure
公共结构DEVMODE_类型
'升级\u警告:固定长度字符串大小必须适合缓冲区。点击查看更多信息:“ms”-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword=“3C1E4426-0B80-443E-B943-0627CD55D48B”
公共dmDeviceName()作为字符
变暗后的版本变短
Dim dmDriverVersion变短
变暗变短
将dmDriverExtra变暗为短
将DMF字段设置为整数
将方向设置为短方向
将纸张尺寸变短
将纸张长度变短
将纸张宽度变短
像短的一样暗淡
影印本短
将dmDefaultSource设置为短
将打印质量设置为“短”
暗淡的颜色像短的一样
将DMD双工设置为短
Dim dmYResolution为短
Dim DMT选项为短
将数据整理为短数据
'升级\u警告:固定长度字符串大小必须适合缓冲区。点击查看更多信息:“ms”-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword=“3C1E4426-0B80-443E-B943-0627CD55D48B”
公共dmFormName()作为字符
将未使用的填充设置为短
将dmBitsPerPel变暗为短
Dim dmPelsWidth为整数
Dim DMPELSHEGHT作为整数
Dim dmDisplayFlags为整数
数字显示频率为整数
端部结构
CopyMemory最初声明为使用As Any,因此我必须将其更改为第二个值的整数(整数适合其他地方使用的代码行)。我需要指定DevMode中包含的哪个值是正确的,但我不知道传递给该方法的是哪个值,它必须在VB6中自动处理。如何确定VB6通过了哪一个


我相信还有一些类似的代码实例正在使用,因此理想情况下,我可以找到vb6如何处理此类情况,并在代码中的其他地方重复修复。

我认为您不了解发生了什么。CopyMemory正在制作整个结构的副本。您现在需要一种.NET方式来执行此操作。看一看这个问题-不要使用类似CopyMemory()的任何东西,您可以简单地使用对变量的普通赋值来复制结构。您根本不可能尝试移植这段代码,PrinterSettings类为打印机包装了DEVMODE。