0

pinvoke Web サイトから次の VB.NET 構造をコピーして貼り付けました。

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

どこで間違ったのですか?どうもありがとうございました。

4

2 に答える 2

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
于 2012-11-14T17:05:28.330 に答える
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
于 2012-11-14T17:50:01.483 に答える