gpt4 book ai didi

c# - Visual Basic .Net 中等效的公共(public)虚拟外部字符串

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:05 25 4
gpt4 key购买 nike

我正在翻译一个用 C# 编写的 dll,我在翻译一个字符串声明时遇到了一些麻烦。 C#中的代码如下:

using BGMC_TypeDefs;
using stdole;
using System.Runtime.CopilerServices;
using System.Runtime.InteropServices;

namespace bgmcproject
{
[Guid("3C69B26B-8D17-11D3-BA9C-00E09803AA6A")]
[ClassInterface(0)]
[ComSourceInterfaces("bgmcproject.__bgmc\0\0")]
[TypeLibType(32)]
[ComImport]
public class bgmcClass : _bgmc, bgmc, __bgmc_Event
{
[DispId(1745027134)]
public virtual extern string szMachineImg { [DispId(1745027134), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [param: MarshalAs(UnmanagedType.BStr), In] set; }
}
}

我已经翻译了一些代码,最后我得到了这个:

Imports BGMC_TypeDefs
Imports stdole
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices

Namespace bgmcproject
<Guid("3C69B26B-8D17-11D3-BA9C-00E09803AA6A")>
<ClassInterface(0)>
<ComSourceInterfaces("bgmcproject.__bgmc\0\0")>
<TypeLibType(32)>
<ComImport>
Public Class bgmcClass
Implements _bgmc, bgmc, __bgmc_Event

<DispId(1745027134)>
Public virtual external String szMachineImg _
(<DispId(1745027134), MethodImpl(MethodImplOptions.InternalCall, _
MethodCodeType = MethodCodeType.Runtime)> _
<param MarshalAs(UnmanagedType.BStr), In> Set )
End Class
End Namespace

我想知道如何写szMacingeImg 的声明。另外如果你能帮我澄清一下,如果“实现”的说法是正确的,或者我应该写“继承”。非常感谢。

最佳答案

这是一种罕见的 extern 关键字用法,没有随附的 DllImport 属性。 extern 关键字与带有 MethodImplOptions.InternalCall 枚举值的 MethodImpl 属性相结合,表示代码是在 CLR 本身中实现的: How does extern work in C#? (参见 Dan Abramov 的回答)。

在 VB 中,我认为您不能单独指定“set”或“get”上的属性,除非属性是以“长格式”编写的,因此与您的代码等效的 VB 应该是:

Imports Microsoft.VisualBasic
Imports System.Runtime.CopilerServices
Imports System.Runtime.InteropServices

Namespace bgmcproject
<Guid("3C69B26B-8D17-11D3-BA9C-00E09803AA6A"), ClassInterface(0), ComSourceInterfaces("bgmcproject.__bgmc" & vbNullChar & vbNullChar), TypeLibType(32), ComImport>
Public Class bgmcClass
Inherits _bgmc
Implements bgmc, __bgmc_Event

<DispId(1745027134)>
Public Overridable WriteOnly Property szMachineImg() As String
<DispId(1745027134), MethodImpl(MethodImplOptions.InternalCall, MethodCodeType := MethodCodeType.Runtime), param:= MarshalAs(UnmanagedType.BStr), [In]>
Set(ByVal value As String)
End Set
End Property
End Class
End Namespace

此外,关于第一个 _bgmc 类型是类还是接口(interface),我假设它是一个类,但您需要检查一下。

关于c# - Visual Basic .Net 中等效的公共(public)虚拟外部字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45170374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com