转自:http://wjason.javaeye.com/blog/491410
在上一篇blog(工具(Tray Friend):将任何程序,最小化到系统托盘 )中。
使用C#调用了很多非托管的C++代码。
现在就把“C# 调用Dll中非托管C++代码时,函数参数的类型对照”这一问题做一个总结。
用这些关键字进行搜索,网上有不少这样那个的内容,比如下面这几个链接
C# 与 C++ 数据类型对照(后三篇内容一样)
http://topic.youkuaiyun.com/u/20090928/11/af7848c6-5071-41aa-92e2-e8d626d6aefe.html
http://blog.youkuaiyun.com/dz45693/archive/2009/09/26/4598867.aspx
http://www.cnblogs.com/yiki/archive/2008/10/29/1321848.html
http://blog.youkuaiyun.com/okadler0518/archive/2009/06/22/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%28VS.85%29.aspx
GetForegroundWindow
http://msdn.microsoft.com/en-us/library/ms633505%28VS.85%29.aspx
方法二:
P/Invoke Interop Assistant
输入你想要的东西(Type,Constant,Procedure&#x