MarshalAsAttribute.SizeParamIndex フィールド
アセンブリ: mscorlib (mscorlib.dll 内)


このフィールドは、COM 対応マネージ オブジェクトを構築する場合に使用します。SizeParamIndex は、COM クライアントから呼び出され、パラメータの 1 つが配列のマネージ メソッドでだけ有効です。マーシャラはアンマネージ配列のサイズを決定できないため、この情報は別のパラメータで渡されます。
サイズを格納するパラメータは、値渡しによる整数である必要があります。UnmanagedType.LPArray で SizeParamIndex と MarshalAsAttribute.SizeConst の両方を指定した場合、これらの値の和がサイズの合計となります。このフィールドは、COM オブジェクトを呼び出すマネージ コードには影響を与えません。詳細については、配列に対する既定のマーシャリング のトピックを参照してください。

Option Strict Off Imports System.Runtime.InteropServices Imports SomeNamespace Namespace SomeNamespace ' Force the layout of your fields to the C style struct layout. ' Without this, the .NET Framework will reorder your fields. <StructLayout(LayoutKind.Sequential)> _ Structure Vertex Dim x As Decimal Dim y As Decimal Dim z As Decimal End Structure Class SomeClass ' Add [In] or [In, Out] attributes as approppriate. ' Marshal as a C style array of Vertex, where the second (SizeParamIndex is zero-based) ' parameter (size) contains the count of array elements. Declare Auto Sub SomeUnsafeMethod Lib "somelib.dll" ( _ <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> data() As Vertex, _ size As Long ) Public Sub SomeMethod() Dim verts(3) As Vertex SomeUnsafeMethod( verts, verts.Length ) End Sub End Class End Namespace Module Test Sub Main Dim AClass As New SomeClass AClass.SomeMethod End Sub End Module
using System.Runtime.InteropServices; using SomeNamespace; namespace SomeNamespace { // Force the layout of your fields to the C style struct layout. // Without this, the .NET Framework will reorder your fields. [StructLayout(LayoutKind.Sequential)] public struct Vertex { float x; float y; float z; } class SomeClass { // Add [In] or [In, Out] attributes as approppriate. // Marshal as a C style array of Vertex, where the second (SizeParamIndex is zero-based) // parameter (size) contains the count of array elements. [DllImport ("SomeDll.dll")] public static extern void SomeUnsafeMethod( [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] Vertex[] data, long size ); public void SomeMethod() { Vertex[] verts = new Vertex[3]; SomeUnsafeMethod( verts, verts.Length ); } } } class Test { public static void Main() { SomeClass AClass = new SomeClass(); AClass.SomeMethod(); } }
using namespace System; using namespace System::Runtime::InteropServices; // Force the layout of your fields to the C-style struct layout. // Without this, the .NET Framework will reorder your fields. [StructLayoutAttribute(LayoutKind::Sequential)] value struct Vertex { public: float x; float y; float z; }; // Add [In] or [In, Out] attributes as appropriate. // Marshal as a C-style array of Vertex, where the second (SizeParamIndex is zero-based) // parameter (size) contains the count of array elements. [DllImport("SomeDLL.dll")] extern void SomeUnsafeMethod( [MarshalAs(UnmanagedType::LPArray,SizeParamIndex=1)]array<Vertex>^data, long size ); int main() { array<Vertex>^verts = gcnew array<Vertex>(3); SomeUnsafeMethod( verts, verts->Length ); }
package SomeNamespace; import System.Runtime.InteropServices.*; import SomeNamespace.*; /** @attribute StructLayout(LayoutKind.Sequential) */ public class Vertex { private float x; private float y; private float z; } //Vertex class SomeClass { // Add [In] or [In, Out] attributes as approppriate. // Marshal as a C style array of Vertex, where the second // (SizeParamIndex is zero-based) // parameter (size) contains the count of array elements. /** @attribute DllImport("SomeDll.dll") */ public static native void SomeUnsafeMethod( /** @attribute MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1) */ Vertex data[], long size); public void SomeMethod() { Vertex verts[] = new Vertex[3]; SomeUnsafeMethod(verts, verts.length); } //SomeMethod } //SomeClass class Test { public static void main(String[] args) { SomeClass aClass = new SomeClass(); aClass.SomeMethod(); } //main } //Test

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からMarshalAsAttribute.SizeParamIndex フィールドを検索する場合は、下記のリンクをクリックしてください。

- MarshalAsAttribute.SizeParamIndex フィールドのページへのリンク