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

 十几行代码,就使一个重要的旧系统组件,完全融入了基于.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);
}
}

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值