没有合适的资源?快使用搜索试试~ 我知道了~
C#调用DLL中非托管C++函数参数类型对照
需积分: 50 31 下载量 41 浏览量
2013-07-25
17:06:02
上传
评论 1
收藏 47KB DOC 举报
温馨提示
试读
12页
在C#编程中,常会用到C++中的dll类库,简单介绍一下它们的对应关系。
资源推荐
资源详情
资源评论
对于一维数组,C#参数在基本类型前加 ref 或 out,out 表示有返回数据。
如调用 c++的 f(float[] a), 在 c#中,为 f(ref a).
对数据结构,
c++
struct SAMPLE_DATA{
byte SampleID[255];
float Value[6];
}
C#
[StructLayout(LayoutKind.Sequential)]
unsafe public struct SAMPLE_DATA
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)]
public byte[] SampleID;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public float[] Value;
}
以下是基本数据类型的对照。
[转自]http://wjason.javaeye.com/blog/491410
使用 C#调用了很多非托管的 C++代码。
现在就把"C# 调用 Dll 中非托管 C++代码时,函数参数的类型对照"这一问题做
一个总结。
用这些关键字进行搜索,网上有不少这样那个的内容,比如下面这几个链接
C# 与 C++ 数据类型对照(后三篇内容一样)
http://topic.csdn.net/u/20090928/11/af7848c6-5071- 41aa-92e2-e8d626d6aefe.html
http://blog.csdn.net/dz45693/archive/2009/09/26/45 98867.aspx
http://www.cnblogs.com/yiki/archive/2008/10/29/132 1848.html
http://blog.csdn.net/okadler0518/archive/2009/06/2 2/4289679.aspx
但是上面的映射有时候会出现问题。
比如上面的帖子都将 LPTSTR 映射成 String,
然而在处理 GetWindowText 函数是,因为这个 LPTSTR 是为了要将结果带回来
的返回值。
因此在这里使用 String 便行不通了,而需要使用 StringBuffer。
注:GetWindowText 的原型
如果问题的方法,仅仅是查看上面那几个链接,那么我一定不会写这篇博客。
我的主要目的是要介绍另外两种方法。
方法一:
查看 Web 版本的 MSDN。
看看下面这两个连接,在 Community Content 部分都给出了 C#,VB 调用的原
型。
当然,不是所有的函数对应的 Community Content 部分都有完整的事例。
但有的给出了一些常量的值,有的给出了一些结构体的定义,总之这部分内容
还是具有参考价值。
注:安装在本机的 MSDN 没有 Community Content 这部分内容。
GetWindowText
http://msdn.microsoft.com/en-us/library/ms633520%2 8VS.85%29.aspx
GetForegroundWindow
http://msdn.microsoft.com/en-us/library/ms633505%2 8VS.85%29.aspx
方法二:
P/Invoke Interop Assistant
输入你想要的东西(Type,Constant,Procedure),他会自动生成相应的代码
(C#,或 VB)。
举例子说明。
当我要 SHGetFileInfo 调用这个函数是,需要用到类型:SHFileInfo
于是我在 P/Invoke Interop Assistant 查询类型 SHFileInfo,便会得到下面结果:
[System.Runtime.InteropServices.StructLayoutAttrib
ute(System.Runtime.InteropServices.LayoutKind.Seque ntial,
CharSet=System.Runtime.InteropServices.CharSet.Uni code)]
publicstruct SHFILEINFOW {
/// HICON->HICON__*
public System.IntPtr hIcon;
/// int
publicint iIcon;
/// DWORD->unsigned int
publicuint dwAttributes;
/// WCHAR[260]
[System.Runtime.InteropServices.MarshalAsAttribute
(System.Runtime.InteropServices.UnmanagedType.ByVal TStr, SizeConst=260)]
剩余11页未读,继续阅读
资源评论
dayong657
- 粉丝: 3
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功