C++ 非托管COM在C#下调用的问题

来源:互联网 发布:计算机应用与软件 编辑:程序博客网 时间:2024/05/23 01:26

最近打算使用新思的触摸板开发包实现一个手势软件


整个SDK主要由以下几部分组成:

说明文档

样例代码

.dll动态链接库文件

.lib库文件

.h头文件


新思的SDK是已经有超过10年没有更新了,整个SDK只提供了C++和VB的接口

而我的软件使用的是C#编写的,这就涉及到一个问题,我怎样才能实现在C#中调用SDK呢?


第1种解决办法:

由于SDK提供了dll文件,我们可以直接使用DllImport将dll文件导入,然后再自己编写一个需要使用的函数接口

但这种办法有相当多的缺陷

一是每个接口函数都要自己写接口,相当繁琐

二是如果函数参数中涉及到指针等C++特有的变量类型时,要进行类型转换,而如果参数中使用了结构体和类的话,更是要自己重新编写结构体和类

总之,这种方法使用起来相当不方便,所以我放弃了


第2种解决办法:

使用managed C++

通过google和询问大牛,了解到托管代码这个概念(也就是managed C++)

托管代码是微软提供给我们,让我们能够在使用C#等开发语言时,能够调用原来C++代码的方法。

整个托管代码的框架是这样的:

托管C++负责调用原始的C++函数,而C#能够调用托管C++生成的dll

这样,托管C++成功的起到了一个桥梁的作用,把natvive C++和C#联系起来了。


大致操作过程如下:

新建一个C++ CLR类库工程

在这个类库中通过将原始的lib和头文件静态链接进来

再将自己想要实现的功能在这个类库中实现

生成dll动态链接库

最后在C#项目中添加引用,将这个动态链接库引用进去,就可以直接使用类库中的函数,实现自己想要的功能了。


0 0