SSortOrder
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ulPropTag | DWORD | 4 | +0 | +0 | ソートの基準とするプロパティのタグ。 |
| ulOrder | DWORD | 4 | +4 | +4 | ソート順(昇順/降順/分類等)を示す値(TABLE_SORT_ASCEND等)。 |
公式ドキュメント
適用対象: Outlook 2013 | Outlook 2016
テーブルの行の並べ替え方法、ソート キーとして使用する列、および並べ替えの方向を定義します。
| プロパティ | 値 |
|---|---|
| ヘッダー ファイル: |
Mapidefs.h |
typedef struct _SSortOrder
{
ULONG ulPropTag;
ULONG ulOrder;
} SSortOrder, FAR *LPSSortOrder;
解説(Remarks)
SSortOrder 構造体は、標準の並べ替え操作またはカテゴリ別の並べ替え操作をどのように実行するかを記述するために使用します。通常、SSortOrder 構造体は SSortOrderSet 構造体にまとめられ、複数のソート キーと並べ替え方向を記述します。SSortOrderSet 構造体は、次の関数およびインターフェイス メソッドで使用されます。
テーブル内でソート キーとして使用できる列の範囲は、プロバイダーによって異なります。現在の列セットに含まれている列は、常にソート キーとして使用できます。ただし、現在の列セットに含まれていない使用可能な列をソート キーとして定義できるかどうかは、各プロバイダーが決定します。使用可能な列とは、TBL_ALL_COLUMNS フラグが設定されているときに IMAPITable::QueryColumns から返される列のことです。
ulOrder メンバーは、並べ替えの方向とカテゴリ化の情報の両方を示します。たとえば、会話 (PidTagConversationTopic)、つまりメッセージとその返信の一連のやり取りである会話スレッドによるカテゴリ化です。行は昇順または降順のいずれかで並べ替えることができ、NULL のエントリはすべて最後に配置されます。
TABLE_SORT_COMBINE 値は、ulPropTag で指定された列を前のカテゴリ列と組み合わせて、複合カテゴリを形成することを示します。つまり TABLE_SORT_COMBINE を使用すると、個々の列の一意の値でカテゴリ化するのではなく、複数の列の組み合わせの一意の値でカテゴリ化できます。たとえば、特定の送信者から受信した特定の件名のメッセージをグループ化する単一のカテゴリを定義できます。値に TABLE_SORT_COMBINE を設定すると、表示されるカテゴリ行の数が少なくなります。
複数値の列による並べ替えは、すべてのテーブル実装で普遍的にサポートされているわけではありません。サポートされている場合は、MVI_PROP マクロを使用して ulPropTag メンバーのプロパティ タグに MV_FLAG を適用し、ソート キーが複数値の列であることを示します。複数値の列による並べ替えは、個々の値を使用して行われます。
ulOrder メンバーの値 TABLE_SORT_CATEG_MAX および TABLE_SORT_CATEG_MIN は、現在使用しているダウンロード可能なヘッダー ファイルでは定義されていない場合があります。その場合は、次の値を使用してコードに追加できます。
#ifndef TABLE_SORT_CATEG_MAX
#define TABLE_SORT_CATEG_MAX ((ULONG) 0x00000004)
#endif
#ifndef TABLE_SORT_CATEG_MIN
#define TABLE_SORT_CATEG_MIN ((ULONG) 0x00000008)
#endif
標準の並べ替えおよびカテゴリ別の並べ替えの詳細については、「Sorting and Categorization」を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)
各言語での定義
#include <windows.h>
// SSortOrder (x64 8 / x86 8 バイト)
typedef struct SSortOrder {
DWORD ulPropTag;
DWORD ulOrder;
} SSortOrder;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SSortOrder
{
public uint ulPropTag;
public uint ulOrder;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SSortOrder
Public ulPropTag As UInteger
Public ulOrder As UInteger
End Structureimport ctypes
from ctypes import wintypes
class SSortOrder(ctypes.Structure):
_fields_ = [
("ulPropTag", wintypes.DWORD),
("ulOrder", wintypes.DWORD),
]#[repr(C)]
pub struct SSortOrder {
pub ulPropTag: u32,
pub ulOrder: u32,
}import "golang.org/x/sys/windows"
type SSortOrder struct {
ulPropTag uint32
ulOrder uint32
}type
SSortOrder = record
ulPropTag: DWORD;
ulOrder: DWORD;
end;const SSortOrder = extern struct {
ulPropTag: u32,
ulOrder: u32,
};type
SSortOrder {.bycopy.} = object
ulPropTag: uint32
ulOrder: uint32struct SSortOrder
{
uint ulPropTag;
uint ulOrder;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SSortOrder サイズ: 8 バイト(x64)
dim st, 2 ; 4byte整数×2(構造体サイズ 8 / 4 切り上げ)
; ulPropTag : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ulOrder : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SSortOrder
#field int ulPropTag
#field int ulOrder
#endstruct
stdim st, SSortOrder ; NSTRUCT 変数を確保
st->ulPropTag = 100
mes "ulPropTag=" + st->ulPropTag