将C#元帅接口代码转换为VB.NET时出现问题

时间:2019-01-09 15:39:20

标签: c# vb.net

我正在尝试将项目从C#转换为VB.NET,以将Outlook消息拖放到我们的程序中。

原始资源可在CodeProject上找到here

我已经完成了95%的工作,但是在实现IStorage接口时遇到了麻烦,下面概述了其中的一部分。

public interface IStorage
{
    [return: MarshalAs(UnmanagedType.Interface)]
    IStream CreateStream([In, MarshalAs(UnmanagedType.BStr)] string pwcsName,
                         [In, MarshalAs(UnmanagedType.U4)] int grfMode,
                         [In, MarshalAs(UnmanagedType.U4)] int reserved1,
                         [In, MarshalAs(UnmanagedType.U4)] int reserved2);                
}

我已经在VB.NET中将其转换为以下内容:

<MarshalAs(UnmanagedType.Interface)>
Function CreateStream(<[In], MarshalAs(UnmanagedType.BStr)> ByVal pwcsName As String,
                      <[In], MarshalAs(UnmanagedType.U4)> ByVal grfMode As Integer,
                      <[In], MarshalAs(UnmanagedType.U4)> ByVal reserved1 As Integer,
                      <[In], MarshalAs(UnmanagedType.U4)> ByVal reserved2 As Integer) As IStream

但是,它导致以下错误:

  

属性“ MarshalAsAttribute”不能应用于“ CreateStream”,因为该属性在此声明类型上无效。

在这里我有点儿不了解了,非常感谢您在帮助我解决此问题方面可能遇到的所有指针

非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式将属性应用于返回值:

Function CreateStream(<[In], MarshalAs(UnmanagedType.BStr)> ByVal pwcsName As String,
            <[In], MarshalAs(UnmanagedType.U4)> ByVal grfMode As Integer,
            <[In], MarshalAs(UnmanagedType.U4)> ByVal reserved1 As Integer,
            <[In], MarshalAs(UnmanagedType.U4)> ByVal reserved2 As Integer) As <MarshalAs(UnmanagedType.Interface)> IStream