2012-11-14 52 views
0

我从pinvoke网站复制并粘贴了以下VB.NET结构。VB.NET pinvoke声明错误?

http://www.pinvoke.net/default.aspx/Structures/BITMAPINFOHEADER.html

然而,当我将其粘贴到模块的名字像这样下一个模块,VB.NET是告诉我,声明预计:

Option Strict Off 
Option Explicit On 

Imports System 
Imports System.Diagnostics 
Imports System.Drawing 
Imports System.Drawing.Drawing2D 
Imports System.Runtime.InteropServices 
Imports System.Windows.Forms 

Module modDrawing 

    StructLayout(LayoutKind.Explicit)>Public Structure BITMAPINFOHEADER 
    <FieldOffset(0)> Public biSize As Int32 
    <FieldOffset(4)> Public biWidth As Int32 
    <FieldOffset(8)> Public biHeight As Int32 
    <FieldOffset(12)> Public biPlanes As Int16 
    <FieldOffset(14)> Public biBitCount As Int16 
    <FieldOffset(16)> Public biCompression As Int32 
    <FieldOffset(20)> Public biSizeImage As Int32 
    <FieldOffset(24)> Public biXPelsperMeter As Int32 
    <FieldOffset(28)> Public biYPelsPerMeter As Int32 
    <FieldOffset(32)> Public biClrUsed As Int32 
    <FieldOffset(36)> Public biClrImportant As Int32 
End Structure 

我有什么错,请? 非常感谢。

回答

1

退房这一个:(不是完整的代码)

Module modDrawing 

     <StructLayout(LayoutKind.Explicit)> _ 
     Public Structure BITMAPINFOHEADER 
      <FieldOffset(0)> Public biSize As Int32 
      <FieldOffset(4)> Public biWidth As Int32 
      <FieldOffset(8)> Public biHeight As Int32 
      <FieldOffset(12)> Public biPlanes As Int16 
      <FieldOffset(14)> Public biBitCount As Int16 
      <FieldOffset(16)> Public biCompression As Int32 
      <FieldOffset(20)> Public biSizeImage As Int32 
      <FieldOffset(24)> Public biXPelsperMeter As Int32 
      <FieldOffset(28)> Public biYPelsPerMeter As Int32 
      <FieldOffset(32)> Public biClrUsed As Int32 
      <FieldOffset(36)> Public biClrImportant As Int32 
     End Structure 

    End Module 
+0

非常感谢! – tmighty

+0

你可能也可以告诉我如何实例化它吗?我不太确定如何做到这一点马歇尔(SizeOf(如网站上所述)。 – tmighty

+0

Marshal.SizeOf(GetType(BITMAPINFOHEADER)) – NeverHopeless

0

在pinvoke.net代码的错误是属性缺少初始<。取而代之的

StructLayout(LayoutKind.Explicit)> 

应改为

<StructLayout(LayoutKind.Explicit)> 

然而,LayoutKind.Explicit是不是真的很懂事这里。当然你可以指定所有的字段偏移量,但是为什么要让自己变得很难?使用LayoutKind.Sequential。由于这是默认设置,因此您可以简单地省略该属性。

Public Structure BITMAPINFOHEADER 
    Public biSize As Int32 
    Public biWidth As Int32 
    Public biHeight As Int32 
    Public biPlanes As Int16 
    Public biBitCount As Int16 
    Public biCompression As Int32 
    Public biSizeImage As Int32 
    Public biXPelsperMeter As Int32 
    Public biYPelsPerMeter As Int32 
    Public biClrUsed As Int32 
    Public biClrImportant As Int32 
End Structure 
+0

谢谢。我并不熟悉pinvoke风格的API声明。 pinvoke网站的顶部,我认为这是它应该完成的新风格。 – tmighty