C#调用C(C++)dll,针对结构体的微软小工具
2014-07-31 14:50
459 查看
相信大家在用C#调用C(C++)dll时会被数据封送搞的晕天转地……下面列举一下头大的事,在CSDN另一博客摘引的。
源地址:http://blog.csdn.net/Donjuan/article/details/3865026
1. 如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode
DLL的情形。
2. 如果你的结构体里面包含数组成员,需要考虑定长的数组,而不是对应C#数据类型。
3. 如果你的结构体里面包含联合体(UNION),需要使用Explict选项,如果联合体里面又包含结构体。
4. 你还要考虑你的结构体可以同时在32位和64位机上运行。
5. 你还要考虑C编译器对结构体所作的PADDING的优化。
6. 你还要考虑在.NET里面对结构体的优化,例如CLR会将一些.NET
struct的成员的次序变换—以便更有效地利用内存。
7. 如果你的结构里面还包含了其他的结构体。
8. 如果你的结构体里面还包含函数指针……
9. 如果你的结构体里面包含函数指针数组。
10.如果你的结构体里面包含了指针……
11.如果你的结构体里面有一些成员是被所调用的C函数所设置的。
12.CLR提供了几种结构体的布局选项,什么Auto,什么Explicit,什么Sequential
13.有的结构体的情况是上面说的情形的综合,想想我们的VARIANT结构吧。
如何头大吗?想杀死B-G吗?想放弃调用dll吗?其实这很正常的,就连微软自己都被自己的数据封送搞的头大,因此他们就出来一个针对数据封送的小工具
P/Invoke Interop Assistant
下载地址:http://download.csdn.net/detail/cumtwys/7699425 0分资源
好这个工具隆重出场了,下面简单介绍一下用法,安装完成之后,运行winsiggen.exe,界面如下,选择【SigImp Translate Snippet】:
在【Native Code Snippet】内输入你的需要转换的代码(如结构体等),然后点击Generate,便生成了C#的封送格式OK!还是蛮好用的!效果如下:
怎么样不错吧……只不过自动生成C#代码自动添加了引用的空间,如果在cs文件的开头使用了using的话完全可以去掉,太碍眼了……
而且通过这个工具也解决了上一篇文章中关于整形数组和字符数组封送格式的疑问……
源地址:http://blog.csdn.net/Donjuan/article/details/3865026
1. 如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode
DLL的情形。
2. 如果你的结构体里面包含数组成员,需要考虑定长的数组,而不是对应C#数据类型。
3. 如果你的结构体里面包含联合体(UNION),需要使用Explict选项,如果联合体里面又包含结构体。
4. 你还要考虑你的结构体可以同时在32位和64位机上运行。
5. 你还要考虑C编译器对结构体所作的PADDING的优化。
6. 你还要考虑在.NET里面对结构体的优化,例如CLR会将一些.NET
struct的成员的次序变换—以便更有效地利用内存。
7. 如果你的结构里面还包含了其他的结构体。
8. 如果你的结构体里面还包含函数指针……
9. 如果你的结构体里面包含函数指针数组。
10.如果你的结构体里面包含了指针……
11.如果你的结构体里面有一些成员是被所调用的C函数所设置的。
12.CLR提供了几种结构体的布局选项,什么Auto,什么Explicit,什么Sequential
13.有的结构体的情况是上面说的情形的综合,想想我们的VARIANT结构吧。
如何头大吗?想杀死B-G吗?想放弃调用dll吗?其实这很正常的,就连微软自己都被自己的数据封送搞的头大,因此他们就出来一个针对数据封送的小工具
P/Invoke Interop Assistant
下载地址:http://download.csdn.net/detail/cumtwys/7699425 0分资源
好这个工具隆重出场了,下面简单介绍一下用法,安装完成之后,运行winsiggen.exe,界面如下,选择【SigImp Translate Snippet】:
在【Native Code Snippet】内输入你的需要转换的代码(如结构体等),然后点击Generate,便生成了C#的封送格式OK!还是蛮好用的!效果如下:
怎么样不错吧……只不过自动生成C#代码自动添加了引用的空间,如果在cs文件的开头使用了using的话完全可以去掉,太碍眼了……
而且通过这个工具也解决了上一篇文章中关于整形数组和字符数组封送格式的疑问……
相关文章推荐
- C#调用C++DLL数据封送结构体转换工具
- c# 调用 研华库函数中 C++ 非托管 Dll 一例(包含指针成员的结构体的调用)
- C#调用C++生成的dll,参数有结构体数组
- C#调用C++写的dll,包含结构体转换和C#动态调用dll(头文件转换为类)
- C# 调用C++dll中的结构体的定义
- c#调用C/C++ DLL,传入指针数组(指针指向自定的结构体)
- c# 调用 研华库函数中 C++ 非托管 Dll 一例(包含指针成员的结构体的调用) [转贴]
- C#调用c++的dll,结构体数组作为引用参数的传递方式
- c# 调用 c++ dll 参数为结构体数组指针
- C#调用c++Dll 结构体数组指针的问题
- (学习笔记)C++底层dll C#调用问题汇总:结构体的不同之处
- C#调用C++ dll时,结构体引用传参的方法
- C#调用C++dll 结构体参数传递问题
- C#调用C++dll 结构体参数传递问题
- c# 调用 研华库函数中 C++ 非托管 Dll 一例(包含指针成员的结构体的调用)
- C# 发中调用一个采用C++封装好的dll, 其结构体中的二维数转换
- C#调用C++编写的COM DLL
- 在C#里面调用带有回调函数和自定义结构体的DLL的例程
- C#中调用C++的dll的参数为指针类型的导出函数
- C#调用C++编写的COM DLL