• <menu id="w2i4a"></menu>
  • logo 【TeeChart Pro ActiveX教程】2018

    文檔首頁>>【TeeChart Pro ActiveX教程】2018>>TeeChart Pro ActiveX教程(十七):設(shè)計時,運行時和授權(quán)要求(下)

    TeeChart Pro ActiveX教程(十七):設(shè)計時,運行時和授權(quán)要求(下)


    下載TeeChart Pro ActiveX最新版本

    設(shè)計和運行時的授權(quán)設(shè)置

    本節(jié)介紹了為符合TeeChart設(shè)計時和運行時授權(quán)體系結(jié)構(gòu)而要采取的配置元素和設(shè)置步驟。

    說明

    TeeChart使用基于Microsoft的System.Component.LicenseProvider類的授權(quán)證控制。當(dāng)通過TeeChart安裝程序安裝TeeChart時,會添加一個注冊表授權(quán)證密鑰,其可見部分可以在HKEY_LOCAL_MACHINE \ SOFTWARE \ Steema Software \ TeeChart.NET密鑰下看到:

    密鑰的存在以及相應(yīng)的“未發(fā)布”密鑰代碼允許在Visual Studio.NET的設(shè)計時使用TeeChart,并允許將密鑰編譯為運行時可執(zhí)行(.exe)和庫(.dll)文件,以便TeeChart.dll和TeeChart.languages.dll文件可以與已編譯的應(yīng)用程序一起分發(fā),但不提供TeeChart選項作為安裝位置的設(shè)計時組件。

    運營考慮因素

    包含TChart,Chart或WebChart組件的項目必須包含Licenses.licx文件。當(dāng)向其添加任何圖表時,Visual Studio IDE會自動將該文件添加到TChart(Windows表單圖表)或WebChart(Web表單圖表)項目中。對于非設(shè)計時圖表應(yīng)用程序,例如,在運行時手動創(chuàng)建圖表 “Steema.TeeChart.Chart c = new Steema.TeeChart.Chart();” ,然后您必須手動將授權(quán)證文件添加到項目,您可能使用的示例文件包含在Utils文件夾中。您可以通過在VS.NET解決方案資源管理器中選擇項目并單擊鼠標右鍵單擊“ 添加 ”來添加它 AddExisting Item ',文件類型為'All files',并選擇'Utils \ Licenses.Licx'。

    在dll中使用TeeChart

    如果您已將帶有授權(quán)證的TeeChart成功編譯到dll中,請注意,如果您在另一個應(yīng)用程序中使用該dll,則需要確保將TeeChart授權(quán)證行添加到最終應(yīng)用程序的Licenses.licx文件中即使該應(yīng)用程序本身可能沒有直接引用TeeChart。如果最終用戶應(yīng)用程序不是在Visual Studio .NET中開發(fā)的,那么在最終編譯時不需要授權(quán)證文件和授權(quán)證本身。

    如果您在具有開發(fā)人員授權(quán)證的計算機上不會重復(fù)使用您的DLL的環(huán)境中工作,請確認重用是否可能屬于“插件使用”的范圍,如下一節(jié)所述,在插件dll中使用TeeChart。如果您認為您的程序集(使用TeeChart)需要由具有TeeChart類和方法知識的容器重新使用或需要引用程序集,但是在沒有TeeChart Developer License的計算機上請確認相關(guān)機器已獲得在設(shè)計時使用TeeChart的授權(quán)。某些分銷或團隊工作情況可能需要通過特殊授權(quán)條件來解決,Steema人員在info@st??eema.com可以幫助進行授權(quán)證查詢。

    在插件dll中使用TeeChart

    標準版的TeeChart for .NET支持授權(quán)控制,以便在動態(tài)加載的插件中使用。該插件通常是一個包含TeeChart的程序集,可以在運行時由容器應(yīng)用程序使用NET的“Assembly.Load”方法或類似方法動態(tài)加載。要允許容器應(yīng)用程序加載和運行TeeChart而不需要容器級別的licenses.licx文件,TeeChart提供了一個默認構(gòu)造函數(shù)的替代方法,通過該構(gòu)造函數(shù),編譯它的dll程序集將自身作為參數(shù)傳遞,并在該級別進行授權(quán)證檢查不在容器應(yīng)用程序的DLL。請注意,容器應(yīng)用程序可能無法直接向TeeChart進行代碼調(diào)用。它可以打開并運行TeeChart dll,而dll本身就是自治的,可以自己調(diào)用TeeChart。允許從容器應(yīng)用程序進行Chart調(diào)用的規(guī)則的例外是,如果TeeChart的方法被可以在獨立接口中定義的方法“包裝”(次要調(diào)用)。可以修改此處描述的示例以包括此類調(diào)用。

    插件

    包含TeeChart的插件會在創(chuàng)建時加載TeeChart將其自身作為參數(shù)傳遞。只有在第一次打開TeeChart時才需要使用重載的構(gòu)造函數(shù),以允許進行授權(quán)證檢查。此后,可以通過常規(guī)手段使用TeeChart。使用的一個例子如下。在此示例中,TeeChart的“虛擬”創(chuàng)建在表單創(chuàng)建時強制執(zhí)行初始授權(quán)證檢查。

    例: 在此示例中,PluginShared.Factory是由宿主應(yīng)用程序引用的接口,它提供了一個名為“CreateForm”的方法。容納TeeChart的程序集實現(xiàn)了PluginShared.Factory,因此也提供了CreateForm方法,但它有自己的實現(xiàn)(在其中加載TeeChart)。主機識別CreateForm方法調(diào)用,而無需了解TeeChart特定程序集。

    請注意。容納TeeChart的程序集必須包含Licenses.licx文件,并在具有有效TeeChart開發(fā)人員授權(quán)證的計算機上進行編譯。

    裝配外殼TeeChart(例如PluginWithTeeChart.dll)


    Class:

    namespace Plugin 
    { 
       public class FactoryImpl : PluginShared.Factory   
        { 
            public System.Windows.Forms.Form CreateForm() 
            { 
                try 
                { 
                    return new PluginWithTeeChart.FormWithChart(); 
                } 
                catch (Exception e) 
                { 
                    MessageBox.Show("failed to create plugin with error: " + e.ToString()); 
                    return null; 
                } 
            } 
        } 
    }

    Form:

    namespace PluginWithTeeChart 
    { 
        public partial class FormWithChart : Form 
        { 
            public FormWithChart() 
            { 
                //discardable Chart forces License check 
                Steema.TeeChart.TChart tempChart = new Steema.TeeChart.TChart(this); 
                tempChart = null; 
                InitializeComponent(); //<---- Normal application code. Could run here various TeeCharts without need for overloaded constructor 
            } 
        } 
    }
    

    容器應(yīng)用程序(例如HostApp.exe)

    容器可能按以下方式裝載TeeChart外殼組件(dll)。HostApp引用發(fā)布CreateForm方法的公共接口Plugin.FactoryImpl非常重要。

    void LoadTeeChartPlugin(string pluginName) 
    { 
      string pluginName = @".dll"; 
      try 
      { 
        Debug.WriteLine("Loading plugin assembly " + pluginName); 
     
        Assembly assembly = Assembly.LoadFrom(pluginName); 
     
        string factoryTypeName = "Plugin.FactoryImpl"; 
     
        Type t = assembly.GetType(factoryTypeName); 
        if (t == null) 
        { 
          MessageBox.Show("Type: " + factoryTypeName + " not found in plugin assembly"); 
          return; 
        } 
     
        PluginShared.Factory factory = (PluginShared.Factory)assembly.CreateInstance(t.ToString()); 
        System.Windows.Forms.Form f = factory.CreateForm(); 
        f.ShowDialog(); 
      } 
      catch (Exception ex) 
      { 
        MessageBox.Show(ex.ToString()); 
      } 
    }

    在Visual C ++ .NET中使用TeeChart

    VC ++中的授權(quán)實現(xiàn)并不像其他.NET編程語言那樣透明。您可以按照Tim Adler在microsoft.public.dotnet.framework新聞組中描述的步驟成功實施VC ++項目的授權(quán)。

    引用:

    “我的解決方法很簡單:創(chuàng)建一個新的解決方案,并在其中一個新的C#項目,使用SAME應(yīng)用程序名稱作為您的C ++應(yīng)用程序。創(chuàng)建一個虛擬表單并將需要授權(quán)的每個組件放到此表單上?;蛘?,編輯licenses.licx文件,自動生成以引用每個組件。然后構(gòu)建應(yīng)用程序。然后導(dǎo)航到調(diào)試目錄并將“* .licenses”文件復(fù)制到C ++應(yīng)用程序的基本目錄中。然后在項目選項下 - >鏈接器 - >輸入 - >嵌入C ++應(yīng)用程序的托管資源文件設(shè)置,請參閱此授權(quán)證文件。然后執(zhí)行'重建'。“

    Licenses.licx文件 該文件是一個文本文件,至少應(yīng)包含一個文件或用作通用文件,以下三行:

     

    
    Steema.TeeChart.Chart, TeeChart 
    Steema.TeeChart.TChart, TeeChart 
    Steema.TeeChart.Web.WebChart, TeeChart 

    內(nèi)容應(yīng)至少包括項目創(chuàng)建的類的名稱,通常是基于Windows窗體的項目的Steema.TeeChart.TChart,以及用于按代碼和Steema.TeeChart創(chuàng)建圖表的項目的Steema.TeeChart.Chart。 Web.WebChart用于包含TeeChart的WebChart組件的WebForm項目。 將圖表添加到表單NET時,會自動添加稍長的版本,也是正確的,包括程序集版本號和公鑰。

    
    Steema.TeeChart.TChart, TeeChart, Version=1.1.1864.22788, Culture=neutral, PublicKeyToken=9c8126276c77bdb7

    向舊的“非授權(quán)”項目添加授權(quán)證支持

    請注意,對于使用以前版本的TeeChart創(chuàng)建的表單應(yīng)用程序,授權(quán)證文件不存在,您可以通過將“工具”調(diào)板的“Steema”部分中的“圖表”拖動到任何文件來快速生成它。項目的表格,然后刪除它。新拖動的圖表會激發(fā)IDE添加Licenses.licx文件。

    運行時分發(fā)

    使用Licenses.licx文件編譯的項目的.exe或.dll可以作為運行時應(yīng)用程序與TeeChart.dll(以及TeeChart.Languages.dll文件,如果需要)一起分發(fā),而無需任何TeeChart要安裝的運行時授權(quán)證文件或注冊表項。

    授權(quán)問題疑難解答

    我們看到的可能的錯誤情況是: - 編譯時出現(xiàn)錯誤消息:

    “無法將授權(quán)證文件'licenses.licx'轉(zhuǎn)換為二進制資源。” 可能的原因是開發(fā)授權(quán)證注冊表項未到位。請檢查本章中描述的可見密鑰條目,以查看其中是否存在任何明顯的問題或遺漏。解決問題的一個選項是使用TeeChart安裝程序重新安裝TeeChart,安裝程序會設(shè)置注冊表項。如果問題仍然存在,請通過支持論壇聯(lián)系TeeChart支持。

    - 嘗試在未安裝designkey的計算機上運行編譯(運行時)輸出應(yīng)用程序時出現(xiàn)授權(quán)證錯誤。 檢查項目是否包含Licenses.licx文件。將圖表添加到表單時可能已自動添加,或者可能已手動添加。在任何一種情況下,請確認項目中的Licenses.licx文件是否為嵌入式資源。您需要激活“顯示所有文件”以在項目的“解決方案資源管理器”窗口中查看Licenses.licx的存在。

    - 問題的另一個可能原因是licenses.licx文件內(nèi)容不正確。請檢查內(nèi)容是否反映了本章前一部分中描述的內(nèi)容。

    如何為設(shè)計時和運行時指定自定義主題

    自定義主題是小* .xml文件,可以通過簡單的代碼行創(chuàng)建:

    tChart1.Export.Theme.Save(@ “C:\ Steema \ MyTheme.xml”); 此自定義主題封裝了許多與圖形,畫筆和筆的顏色以及面板,軸,頁眉,頁腳,圖例等樣式相關(guān)的圖表圖形設(shè)置。創(chuàng)建后,這些主題可以顯示在圖表編輯器的主題選項卡中,名稱出現(xiàn)在那里作為文件的名稱。為了使圖表編輯器知道在哪里查找這些文件,有一個注冊表設(shè)置,它指定本地機器上的文件夾:

    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Steema Software\TeeChart.NET]  
    "ThemeFolder"="C:\Program Files\Steema Software\TeeChart for .NET v3\Themes" 

    只需將自定義主題(* .xml文件)添加到此鍵中指定的文件夾,圖表編輯器就會讀取并顯示它們。

    TeeChart.Standard商業(yè)版的授權(quán)設(shè)置

    TeeChart標準商業(yè)版通過nuget.org網(wǎng)站作為評估裝配提供,功能齊全,在圖表面上顯示水印。注冊授權(quán)證時,會向被授權(quán)方提供名為teechart.licenses的授權(quán)證文件。此文件可能包含在項目中以激活授權(quán)證并隱藏評估水印。

    說明

    teechart.licenses可能包含在項目中,如啟動指南中所述:https ://www.steema.com/linkIn/tnetstd_startup

    使用授權(quán)文件

    一旦包含在項目中并與其正確關(guān)聯(lián)(例如,添加為一個項目的嵌入式資源)然后該應(yīng)用程序在技術(shù)上準備分發(fā)。

    購買TeeChart Pro AciveX正版授權(quán),請點擊“咨詢在線客服”喲!

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();