C++/CLI:被忽视的集成技术

原创 2006年05月17日 20:02:00

 十几行代码,就使一个重要的旧系统组件,完全融入了基于.Net的新系统中!事情是这样的:

  • C语言写的一个标准的 Win32 DLL,完成了一个算法相当复杂的功能,在旧有系统中稳定而高效的运行,但是已没有源代码

  • 我们的新系统需要完全相同的功能组件,但新系统基于.Net,用C#开发

幸好有C++/CLI,只用了两个小时开发调试,十几行代码就搞定!主要工作就是重新用C++/CLI的语法声明 DLL 中的函数,或曰所谓托管非托管混合编程,例如:

原来的 DLL 函数声明为:_declspec(dllimport) bool QueryInit(const char* lpszDataFilePath = NULL);

用C++/CLI重新声明如下:

[DllImport("Query.dll", EntryPoint="QueryInit")]

extern "C" bool QueryInit([MarshalAs(UnmanagedType::LPStr)] String^ lpszDataFilePath);
 

然后就可以直接调用:bool ok = QueryInit("d:/data/");包装一下编译为CLI的DLL就可以给C#用

 

不需要  Web Service  等“重型”的包装技术,C++/CLI提供了在特定情形下最直接简便的选择;当然这种集成技术主要面向功能的集成,对面向数据,面向服务的集成而言没有必要,因为在那些情形下有多种方案可供选择

由于并非专业的 .Net 开发者,或许有更直接的方法可以在 C# 中调用标准 Win32 DLL,恳请各位看官赐教


 

[今天又看了一下,,发现C#也可以:

using System.Runtime.InteropServices;

public class Win32 {
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MessageBox(int hWnd, String text, String caption, uint type);
}

public class HelloWorld {
public static void Main() {
Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
}
}

]

C++/CLI 实战技术收集(我讨厌MFC)

C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统。C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和...
  • wlanye
  • wlanye
  • 2017年07月12日 11:31
  • 672

C++容易被忽视的基础知识

作为一个java开发者,由于实际需要最近开始接触C++,这是最近接触C++碰到的一些难点和易错点,整理如下,给自己和其他C++的初学者···· 通过本文,你可以学到: 1)浮点值的上溢和下溢 2)浮点...
  • wws199304
  • wws199304
  • 2015年04月23日 18:46
  • 610

C++/CLI全景体验”专栏之《C++/CLI基本类型》

C++/CLI基本类型文/Stanley Lippman   李建忠 导读:本文向大家揭示了在将CLI类型系统和ISO-C++语义框架集成在一起的时候,微软做了哪些调整工作,以及如何在必要的时候调整在...
  • soarwell
  • soarwell
  • 2005年04月23日 22:39
  • 1422

C++/CLI简介(什么是C++/CLI) -------C++/CLI 编程系列一

要知道C++/CLI是什么,首先知道什么是CLI。 一、CLI简介 CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环...
  • Eric_Jo
  • Eric_Jo
  • 2009年05月14日 20:19
  • 11579

实例解析C++/CLI的输入与输出

实例解析C++/CLI的输入与输出——有关C++/CLI程序读写的ABC           当使用标准C++编程时,我们已开始接触到两个主要的I/O“工具”:标准C头文件cstdio和标准C++中与...
  • xieqidong
  • xieqidong
  • 2008年04月03日 08:06
  • 886

C++/Cli语言语法总结

Cli语言的部分语法规则: 1、类的声明和引用      引用某个类时,需引用该类所在的空间;      若引用代码和类定义在同一个命名空间,但在不同的文件,则引用类声明的头文件; 2、类的方法   ...
  • songshu5555
  • songshu5555
  • 2014年02月17日 13:24
  • 1539

C++/CLI(四):字符串

C++/CLI字符串(Unicode字符组成的字符串)是指在System命名空间中定义的String类,即由System:Char类型的字符序列组成的字符串。它包含大量强大的功能,使得字符串的处理非常...
  • anenyang
  • anenyang
  • 2011年12月02日 16:08
  • 1031

C#与C++/CLI混合编程

最近做项目用到了一个二维码识别的SDK,想在C#里做个界面去调用该库生成和解析二维码,原本之前做过在C#里调用DLL的研究,没想到这次的尝试会异常的艰难,听我慢慢说来。         先用go...
  • Plutus_Lee
  • Plutus_Lee
  • 2013年12月12日 22:01
  • 1752

C++/CLI不是用来写应用的

可以同时支持编译出机器码和.NET托管代码的C++/CLI,前身是Managed C++。程序员喜欢强大的语言可以理解,不少人学用C++也是因为C++很强大。但强大并不一定各方面都擅长,有所得必有所失...
  • Nightmare
  • Nightmare
  • 2011年05月31日 14:44
  • 2224

《C++/CLI面向对象编程》(郑阿奇)读书笔记

1 C++/CLI标准 由ECMA最早于2003年开始设计,最新版ECMA-372 在2005年11月推出。 2 双关键字 enum calss  enum struct for eac...
  • shellching
  • shellching
  • 2013年01月18日 12:32
  • 4063
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++/CLI:被忽视的集成技术
举报原因:
原因补充:

(最多只允许输入30个字)