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
- C++ 非托管COM在C#下调用的问题
- 在C#中调用托管和非托管代码的问题
- 非托管C++调用C#的COM(转载)
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- PInvoke调用导致堆栈不对称 c#调用C++win32非托管dll的问题深度分析
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- [C#/C++]C#调用非托管DLL的APIs
- C#调用非托管C编写DLL的数据类型转换
- C#调用非托管C++DLL的两种方法
- C#调用非托管dll debug问题
- C#调用非托管dll debug问题
- 使用C#.net调用非托管DLL遇到的问题
- 在非托管的 VC++2005 中调用托管的 C# DLL 文件
- C#调用非托管DLL的APIs
- C#调用非托管DLL的APIs
- C#调用非托管的代码
- 92.leetcode Reverse Linked List II(medium)[链表逆序]
- 传智播客推出少儿教育品牌-酷丁鱼
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)(r)
- TRANSFORM_TEX
- LeetCode | Largest Rectangle in Histogram
- C++ 非托管COM在C#下调用的问题
- 数据仓库的模型设计
- pull 解析xml
- 隐藏Linux命令行历史
- (开发笔记)转载:解决Maven的“Missing artifact ……”问题
- RabbitMQ服务所需的相关端口号
- C#多线程(上)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)(r)
- JQuery(一)