首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 序列化與 ActiveX 控制項整合實戰指南

     編輯:關於C語言

二進位序列化

核心類別

  • [Serializable]:標記類別可序列化
  • BinaryFormatter:高效二進位格式,含型別資訊
  • [NonSerialized]:排除欄位
  • IDeserializationCallback:反序列化後回呼,重建衍生資料

完整範例:產品清單序列化


using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Products : IDeserializationCallback
{
    private long _startNumber = 1;
    private long _endNumber;
    [NonSerialized] private long[] _products; // 不序列化,反序列化後重建

    public Products(long start, long end)
    {
        _startNumber = start;
        _endNumber = end;
        RebuildProducts();
    }

    private void RebuildProducts()
    {
        _products = new long[_endNumber - _startNumber + 1];
        for (long i = 0; i < _products.Length; i++)
            _products[i] = _startNumber + i;
    }

    public void Serialize(string path)
    {
        using (var fs = new FileStream(path, FileMode.Create))
        {
            new BinaryFormatter().Serialize(fs, this);
        }
    }

    public static Products Deserialize(string path)
    {
        using (var fs = new FileStream(path, FileMode.Open))
        {
            return (Products)new BinaryFormatter().Deserialize(fs);
        }
    }

    // 反序列化完成後自動呼叫
    public void OnDeserialization(object sender)
    {
        RebuildProducts(); // 依 _startNumber/_endNumber 重建陣列
    }

    public void Display()
    {
        Console.WriteLine($"Products: {string.Join(", ", _products)}");
    }

    public static void Main()
    {
        var p = new Products(1, 10);
        p.Serialize("products.dat");
        var p2 = Products.Deserialize("products.dat");
        p2.Display(); // 輸出 1,2,3...10
    }
}

序列化格式比較

格式化器命名空間特點
BinaryFormatterSystem.Runtime.Serialization.Formatters.Binary緊湊、含型別、版本容錯差
SoapFormatterSystem.Runtime.Serialization.Formatters.SoapXML SOAP、可讀、效能較差
XmlSerializerSystem.Xml.Serialization僅公用屬性/欄位、可控制 XML 結構、Web Service 標準
DataContractSerializerSystem.Runtime.SerializationWCF 預設、效能佳、需 [DataContract]/[DataMember]
JsonSerializerSystem.Text.Json.NET Core 標準、高效能、UTF-8、可自訂選項

ActiveX 控制項在 Windows Forms 使用

步驟

  1. 開發 ActiveX (VB6/VC++/Delphi),產生 .ocx
  2. 註冊:regsvr32 MyControl.ocx (需系統管理員)
  3. Visual Studio 工具箱 → 右鍵「選擇項目」→「COM 元件」→ 勾選控制項
  4. 拖曳至表單,自動產生 AxInterop.xxx.dll (ActiveX 包裝) 與 Interop.xxx.dll (RCW)

程式碼呼叫


// 假設控制項名為 axCalculator,方法 Add(ref int left, ref int right)
private void btnCalc_Click(object sender, EventArgs e)
{
    int left = 10, right = 20;
    int result = axCalculator.Add(ref left, ref right);
    labelResult.Text = result.ToString();
}

注意事項

  • ActiveX 為 32 位元,專案必須設定 Prefer 32-bit 或 Platform target: x86
  • 部署時需將 .ocx 註冊至目標機器
  • 建議漸進式遷移至 .NET 原生控制項或 WPF/Web 替代方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved