Value プロパティに DispId(0) を指定するところ以外は特に問題ないと思います。

using System;
using System.Data;
using System.Runtime.InteropServices;

namespace OracleInProcServerForVBS
{

    [ComVisible(true)]
    [Guid(OraField.InterfaceId)]
    public interface IOraField
    {
        [DispId(0)]
        object Value { get; set; }
        string Name { get; }
    }

    [ComVisible(true)]
    [Guid(OraField.ClassId)]
    [ClassInterface(ClassInterfaceType.None)]
    public class OraField : IOraField
    {
        public const string ClassId = "EBF9FB4A-0D9C-4A57-9E53-6A0C66CD69AE";
        public const string InterfaceId = "E8EB10B6-D4F8-4262-B912-66CF86345A85";

        OraDynasetClass m_Dynaset;
        string m_Name;
        DataColumn m_DataColumn;

        internal OraField(OraDynasetClass dyn, string name, DataColumn dc) {
            m_Dynaset = dyn;
            m_Name = name;
            m_DataColumn = dc;
        }

        [DispId(0)]
        public object Value {
            get {
                var row = m_Dynaset.CurrentRow;
                if (row == null) {
                    return DBNull.Value;
                }
                return row[m_DataColumn]; 
            }
            set {
                var row = m_Dynaset.CurrentRow;
                if (row != null) {
                    row[m_DataColumn] = value;
                }
            }
        }

        public string Name {
            get { return m_Name; }
        }
    }
}



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2020-04-14 (火) 16:11:19 (42d)