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++中被忽视的隐藏

原文:http://blog.163.com/dmg_123456/blog/static/56705063200992395226772/ 稍微懂得点oop的人都知道重载,那是多态...
  • sraing
  • sraing
  • 2011年08月11日 11:54
  • 4024

C++中一个容易被忽视的名字查找规则

现在,有下面的代码:namespace lx1{    class Point3d    {    public:        Point3d (double dx, double dy, doub...

C++被忽视语言点总结

1、#define PI 3.1415926 缺点:define宏定义只在预编译的时候进行字符置换,预编译之后,程序中不再有PI这个标识符,PI不是变量,没有类型,不占用内存单元,也就意味着不能用指...

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

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

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

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

Java容易被忽视的API

  • 2011年06月04日 11:47
  • 97KB
  • 下载

Linux容易被忽视的细节

linux容易被忽视的细节一:当一个用户对目录具有写权限,但对目录下的文件没有任何权限时,是否可以编辑此文件,是否可以删除此文件?         测试         1、创建/tmp/test...
  • mfwing
  • mfwing
  • 2016年06月04日 17:08
  • 298

项目管理中的成本控制:被忽视的终极目的

如果你在一个繁忙的工作日之后去问一个从业不久的项目经理,你这一天工作的目的是什么,最容易得到的回答是按期交付和确保进度,而很少有人跟你提及成本问题。但是当我们把视角放得宏观一些,比如说在项目启动和总结...
  • kimbo
  • kimbo
  • 2015年01月15日 15:36
  • 283

经常被忽视的字节顺序

说起字节顺序,有些人可能会感到陌生,大多数程序员会认为机器相关的东西与自己似乎没太大关系,“操作系统、编译器和运行时环境不是已经给我们提供了很好的屏蔽吗?”话虽如此,但也不尽然,深入地了解一下概念还是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++/CLI:被忽视的集成技术
举报原因:
原因补充:

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