我正在尝试将项目从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”,因为该属性在此声明类型上无效。
在这里我有点儿不了解了,非常感谢您在帮助我解决此问题方面可能遇到的所有指针。
非常感谢。
答案 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