光道視覺科技股份有限公司
關於我們 最新消息 產品介紹 下載專區 技術問題 聯絡我們
Sitemap 回首頁 繁體中文 English
技術問題

[SDK] 如何在 Visual Studio .NET 開發環境下宣告動態物件?

如何在Visual Studio .NET 開發環境(Visual Basic.NET / Visual C++.NET / Visual C# .NET)下宣告動態物件?

以Visual Basic .NET為例:
Dim tempROI As New AxAxOvkBase.AxAxROIBW8()  '宣告一動態物件 AxROIBW8
tempROI.SetPlacement(50, 50, 100, 100)  
'設定 ROI 框架位置

於第二行會出現錯誤訊息, 如: "發生的例外狀況類型,'System.Windows.Forms.AxHost.InvalidActiveXStateExecption'
發生於 AxInterop.AxOvkBase.dll", 這是因為.NET環境下所有物件生成與消失都由CLR所管制, 但COM元件(OVK皆為ActiveX/COM元件)本身並非CLR所能管理(unmanaged code)的元件, 因此呼叫上層物件的Add函式來告知CLR此tempROI元件為unmanaged後, .NET系統才會正確產生該元件.

因此於 .NET 環境中, "Dim tempROI As New AxAxOvkBase.AxAxROIBW8()" 程式碼並不足以正確地動態產生一個AxROIBW8物件, 使用者必需以如下兩行程式來正確產生AxROIBW8物件:
Dim tempROI As New AxAxOvkBase.AxAxROIBW8()  '宣告一動態物件 AxROIBW8
Me.Controls.Add(tempROI)  
'指定管理 tempROI 的物件
tempROI.SetPlacement(50, 50, 100, 100)  '設定 ROI 框架位置

如上所示, 於.NET環境下, 動態產生一個OVK物件時需加上 "Me.Controls.Add(xxx)" 指令,才能讓.NET正確地動態產生一個OVK物件, 後續才能控制所宣告的"動態物件"的屬性與方法.

=====================================================================

Visual C++ .NET為例, 正確動態產生方式如下:
AxAxOvkBase::AxAxROIBW8^  tempROI = gcnew AxAxOvkBase::AxAxROIBW8;
this->Controls->Add(tempROI);

Visual C# .NET為例, 正確動態產生方式如下:
AxAxOvkBase.AxAxROIBW8  tempROI = new AxAxOvkBase.AxAxROIBW8;
this.Controls.Add(tempROI);

如果使用者不希望動態產生的OVK物件在視窗上出現, 可以於Add之後再加入一行:
tempROI.Visible = false

如此動態產生的OVK物件就不會顯示出來

Copyright ©2008 Internet Service by
AISYS Vison company.