C# Delphi开发中的DLL

开发 后端
本文介绍C# Delphi开发中的C# DLL,以及介绍TChart这个画图控件,它本身很强大,支持各类图,如点线图,柏拉图,柱状图等等。

在以前用C# Delphi开发的项目中,会经常用到TChart这个画图控件,它本身很强大,支持各类图,如点线图,柏拉图,柱状图等等,加上可以输出成 BMP,JPEG,JPG,SVG,GIF等各种格式图片,很好用,当时也封装成比较独立的C# DLL文件。这次开发.NET程序正好派上用场。

C# Delphi开发几个关键技术点:

1.C#要以非托管方式调用DLL

2.C#把整理好的画图数据生成事先定义好格式的XML文件,传给DLL

3.C# DLL解析XML文件,根据相应格式,要求,画图

4.C# DLL输出GIF文件(经过比较GIF图像失真率小,且文件大小最小)

5.C#装载GIF文件,传到前台展示

C# Delphi开发关键代码:

  1. 以下是引用片段:  
  2. #region 定义调用Delphi写的画图DLL  
  3. ///   
  4. /// 定义调用Delphi写的画图DLL  
  5. ///   
  6. private class DrawChartFromDll  
  7. {  
  8. //定义DLL文件名,此文件路径要加到系统Path中  
  9. private const string _fileDll = @"Chart.dll";  
  10. //调用非托管Dll,GetChartFromXMLByNet是ChartAccess.dll公开的函数名称  
  11.  [DllImport(_fileDll, EntryPoint = "GetChartFromXMLByNet"
    CharSetCharSet = CharSet.Ansi, CallingConventionCallingConvention = 
    CallingConvention.StdCall)]  
  12. //C#中的申明  
  13.  public static extern int GetChartFromXMLByNet
    (int piChartType, string psXMLFileName, string psPriChartFileName, 
    string psSecChartFileName, string psPriHotFileName, string psSecHotFileName);  
  14. }  
  15. #endregion  
  16. public ChartResultData GetCharts
    (ChartData _ChartData, Hashtable _HotPriAdditionSeqNo, Hashtable _HotSecAdditionSeqNo)  
  17. {  
  18. //根据数据生成XML文件  
  19. string _xmlFileName = "";  
  20. ChartResultData _ChartResultData = new ChartResultData();  
  21. try  
  22. {  
  23. _xmlFileName = this.ConvertDataToXml(_ChartData);  
  24. }  
  25. catch (Exception err)  
  26. {  
  27. _ChartResultData.ErrMessage = err.Message;  
  28. }  
  29. ...  
  30. //调用DELPHI,取得返回参数  
  31. int _return = -1;  
  32. try  
  33. {  
  34.  _return = DrawChartFromDll.GetChartFromXMLByNet
    (m_chartType, _xmlFileName, _priChartFileName, 
    _secChartFileName, _priHotFileName, _secHotFileName);  
  35. }  
  36. catch (Exception err)  
  37. {  
  38. if (_return > 0)  
  39. {  
  40. //删除临时生成的XML文件  
  41. this.DeleteTempFile(_xmlFileName);  
  42. this.DeleteTempFile(_priChartFileName);  
  43. this.DeleteTempFile(_secChartFileName);  
  44. this.DeleteTempFile(_priHotFileName);  
  45. this.DeleteTempFile(_secHotFileName);  
  46. _ChartResultData.ErrMessage = err.Message;  
  47. return _ChartResultData;  
  48. }  
  49. else  
  50. {  
  51. //可能因为安全性问题,在频繁连续调用DLL方法时有可能出现內存保护错误信息,
    虽然出错,但方法已经正确调用并能返回正确的值,此时可以忽略此错误  
  52. _return = 0;  
  53. }  
  54. }  
  55. //删除临时生成的XML文件  
  56. this.DeleteTempFile(_xmlFileName);  
  57. ...  

【编辑推荐】

  1. 简单介绍C#预处理
  2. 学习C#无词尾符号经验谈
  3. C#调用QuickTest自动化
  4. 详解C#正规表达式
  5. C#字符串插入html标签
责任编辑:佚名 来源: IT168
相关推荐

2009-08-05 16:49:42

C#中调用dll

2009-08-03 12:57:27

C#调用DLL

2009-07-31 14:54:48

dll函数C#导出

2009-12-16 09:38:36

2009-08-07 17:12:07

C# DLL函数

2009-08-07 17:22:36

C#调用dll导出函数

2009-07-31 17:28:35

C#语言调用DLL

2009-08-18 16:31:19

Visual C#编写

2011-04-08 09:52:44

C++C#DLL

2009-08-07 14:10:13

C# WebserviDelphi

2009-08-05 15:04:14

C# dll注入

2009-08-24 16:11:35

C#项目开发

2011-06-08 10:06:32

C#

2009-08-05 09:30:39

C#调用DLL函数

2009-08-05 16:41:36

C#调用VC dll

2009-09-02 17:16:01

冒泡排序

2009-08-05 09:40:02

C#调用DLL函数

2009-08-18 14:36:36

C# 操作Excel

2009-08-24 15:58:00

Visual C#生成

2009-08-05 09:22:43

C#调用VC DLL
点赞
收藏

51CTO技术栈公众号