c#调用外部接口小程序C接口,程序直接退出

3738人阅读
C#中的快捷键,可以更方便的编写代码
CTRL + SHIFT + B 生成解决方案
CTRL + F7 生成编译
CTRL + O 打开文件
CTRL + SHIFT + O 打开项目
CTRL + SHIFT + C 显示类视图窗口
F4 显示属性窗口
SHIFT + F4 显示项目属性窗口
CTRL + SHIFT + E 显示资源视图
F12 转到定义
CTRL + F12 转到声明
CTRL + ALT + J 对象浏览
CTRL + ALT + F1 帮助目录
CTRL + F1 动态帮助
SHIFT + F1 当前窗口帮助
CTRL + ALT + F3 帮助-搜索
SHIFT + ALT + ENTER 全屏显示
CTRL + - 向后定位
CTRL + SHIFT + - 向前定位
CTRL + F4 关闭文档窗口
CTRL + PAGE DOWN 光标定位到窗口上方
CTRL + PAGE UP 光标定位到窗口下方
CTRL + F6
CTRL + TAB 下一个文档窗口
CTRL + SHIFT + F6
CTRL + SHIFT + TAB 上一个文档窗口
ALT + F6 下一个面板窗口
CTRL + K, CTRL + L 取消remark
CTRL + K, CTRL + C 注释选择的代码
CTRL + K, CTRL + U 取消对选择代码的注释
CTRL + M, CTRL + O 折叠代码定义
CTRL + M, CTRL + L 展开代码定义
CTRL + DELETE 删除至词尾
CTRL + BACKSPACE 删除至词头
SHIFT + TAB 取消制表符
CTRL + U 转小写
CTRL + SHIFT + U 转大写
CTRL + SHIFT + END 选择至文档末尾
CTRL + SHIFT + HOME 选择至文档末尾开始
SHIFT + END 选择至行尾
SHIFT + HOME 选择至行开始处
SHIFT + ALT + END 垂直选择到最后尾
SHIFT + ALT + HOME 垂直选择到最前面
CTRL + A 全选
CTRL + W 选择当前单词
CTRL + SHIFT + PAGE UP 选择至本页前面
CTRL + SHIFT + PAGE DOWN 选择至本页后面
CTRL + END 文档定位到最后
CTRL + HOME 文档定位到最前
CTRL + G 转到…
CTRL + K, CTRL + P 上一个标签
CTRL + K, CTRL + N 下一个标签
ALT + F10 调试-ApplyCodeChanges
CTRL + ALT+ Break 停止调试
CTRL + SHIFT + F9 取消所有断点
CTRL + F9 允许中断
CTRL + SHIFT + F5 调试-重新开始
F5 运行调试
CTRL + F5 运行不调试
F10 跨过程序执行
F11 单步逐句执行
CTRL + J 列出成员
CTRL + PAGE DOWN 下一个视图
CTRL + B 格式-粗体
CTRL + SHIFT + T 格式-文字缩进
调试快捷键
F6: 生成解决方案
Ctrl+F6: 生成当前项目
F7: 查看代码
Shift+F7: 查看窗体设计器
F5: 启动调试
Ctrl+F5: 开始执行(不调试)
Shift+F5: 停止调试
Ctrl+Shift+F5: 重启调试
F9: 切换断点
Ctrl+F9: 启用/停止断点
Ctrl+Shift+F9: 删除全部断点
F10: 逐过程
Ctrl+F10: 运行到光标处
F11: 逐语句
编辑快捷键
Shift+Alt+Enter: 切换全屏编辑
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
Ctrl+I: 渐进式搜索
Ctrl+Shift+I: 反向渐进式搜索
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
Ctrl+Shift+V: 剪贴板循环
Ctrl+左右箭头键: 一次可以移动一个单词
Ctrl+上下箭头键: 滚动代码屏幕,但不移动光标位置。
Ctrl+Shift+L: 删除当前行
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态
Ctrl+M,P: 停止大纲显示
Ctrl+E,S: 查看空白
Ctrl+E,W: 自动换行
Ctrl+G: 转到指定行
Shift+Alt+箭头键: 选择矩形文本
Alt+鼠标左按钮: 选择矩形文本
Ctrl+Shift+U: 全部变为大写
Ctrl+U: 全部变为小写
代码快捷键
Ctrl+J / Ctrl+K,L: 列出成员
Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息
Ctrl+K,I: 快速信息
Ctrl+E,C / Ctrl+K,C: 注释选定内容
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容
Ctrl+K,M: 生成方法存根
Ctrl+K,X: 插入代码段
Ctrl+K,S: 插入外侧代码
F12: 转到所调用过程或变量的定义
窗口快捷键
Ctrl+W,W: 浏览器窗口
Ctrl+W,S: 解决方案管理器
Ctrl+W,C: 类视图
Ctrl+W,E: 错误列表
Ctrl+W,O: 输出视图
Ctrl+W,P: 属性窗口
Ctrl+W,T: 任务列表
Ctrl+W,X: 工具箱
Ctrl+W,B: 书签窗口
Ctrl+W,U: 文档大纲
Ctrl+D,B: 断点窗口
Ctrl+D,I: 即时窗口
Ctrl+Tab: 活动窗体切换
Ctrl+Shift+N: 新建项目
Ctrl+Shift+O: 打开项目
Ctrl+Shift+S: 全部保存
Shift+Alt+C: 新建类
Ctrl+Shift+A: 新建项
VS2005的隐藏快捷键
这里我将会把一些无意中发现的VS2005中没有明确指出的快捷键共享出来,并不是所有的快捷键,或者常见的一些快捷键。
1、Ctrl+Space直接完成类或函数(本来这个并不算隐藏的快捷键,但是因为中文输入法抢占这个快捷键,所以。。。,替代的快捷键是Alt+Right)
2、Shift+Delete整行删除,并且将这一行放到剪贴板(这时候不能选中一段内容)
3、Shift+Insert粘贴,有点匪夷所思,Ctrl+V就可以了,大概是为了和Shift+Delete对应吧
4、Ctrl+Up,Ctrl+Down滚动编辑器,但尽量不移动光标,光标保证在可见范围内
5、Ctrl+BackSpace,Ctrl+Delete整词删除,有的时候很有用
6、Ctrl+Left,Ctrl+Right按整词移动光标(不算隐藏,和前面几条加起来就是Ctrl光标控制套件了)
7、Alt+Shift+F10打开执行改名,实现接口和抽象类的小窗口(还可以用Ctrl+.,不过有的中文输入法用到这个)
8、Shift+F9调试是打开QuickWatch,内容是当前光标所在处的内容
9、F12转跳到定义,很有用的快捷键
10、Shift+F12查找所有引用
11、Ctrl+F10=F5,开始Debug
12、Ctrl+F6循环察看代码窗口,有点Ctrl+Tab的感觉
13、Ctrl+F3查找当前光标选中的内容,可以和F3配合使用
14、Ctrl+F2将焦点转移到类的下拉框上
15、Alt+F7=Ctrl+Tab
16、Alt+F11新开VS2005并编辑宏
17、Alt+F12查找=Ctrl+F
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:129187次
积分:2363
积分:2363
排名:第11753名
原创:98篇
译文:12篇
评论:15条
(2)(13)(19)(6)(16)(7)(2)(2)(2)(3)(8)(8)(14)(1)(13)(3)C#调用c语言接口问题
[问题点数:20分,结帖人li_ser]
C#调用c语言接口问题
[问题点数:20分,结帖人li_ser]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
2013年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。关于C#调用C++的Dll接口
&&&MSN转到新浪的首发博客&&&
今天,上班时一个朋友问了一下C#如何动态调用C++的Dll中的接口,就大概整理一下。
首先,制作一个普通的Dll(非COM的),API到处接口声明定义如下:
.h: _declspec(dllexport) void mymath(int* a);
&void mymath(int* a)
我们制作一个Dll(假定名字"ExportFun.dll"),此时的Dll
C++/C程序调用没有问题,就是动态Dll使用的那几个办法。
问题是,如何让C#来调用呢?
-------------------------------------------
System.Runtime.InteropS&&
//使用运行时Interop
namespace TestSharp
//API&声明,使用DllImport,在C#程序运行时会载入Dll
//同时,声明要使用的接口
[DllImport("ExportFun.dll", EntryPoint = "mymath")]
private static extern void mymath(IntPtr a);&
//与C++声明不太一致
static void Main(string[] args)
&&&&&&&&&&&
IntPtr pb = Marshal.AllocHGlobal(0);
&&&&&&&&&&&
mymath(pb);
&&&&&&&&&&&
int bb = Marshal.ReadInt32(pb);
&&&&&&&&&&&
Console.WriteLine(bb.ToString());
-----------------------------------------------
这样C#Code就可以调用C++的Dll接口了,其中,基本数据类型没有问题,关键是指针,句柄什么的。
如上,C#声明mymath的参数不是int*, 因为C#是托管类代码,int*是非托管类的,所以这类类型都要
用IntPtr代替。
然后,就是由于Dll操作的是Native的Code,所以C#调用这个接口时,是要做一些转换操作,那就是
Marshal。 首先,用Marshal分配一块Native的内存,然后传入给mymath(),此时Dll中对内存操作就
OK了,然后再用Marshal读取这个内存位置的数据,就可以得到结果1010了。
好了,这是一个比较简单的数据类型,如果是结构体呢?
我们要注意,.Net与Native对数据在内存上的排列不太一样。
假如,我定义一个结构体
struct MYSTRUCT_T
_declspec(dllexport)& MYSTRUCT_T*
mymath3();
MYSTRUCT_T* mymath3()
&&& MYSTRUCT_T*
pT = new MYSTRUCT_T();
pT-&a = 500;
pT-&b = 600;
pT-&c = 'A';
&&& return
一个比较简单的结构体类型,接口函数返回该结构体指针
-----------------------------------------------
[StructLayout(LayoutKind.Explicit)]&
public struct myStruct_t
[FieldOffset(0)]&&&&
//就是起始地址,所以位移为0
&&&&public
a;&&&&&&&&
[FieldOffset(4)]&&&&
//相对于起始地址,位移一个int,32位机上是4个字节
&&& public int
b;&&&&&&&&
[FieldOffset(8)]&&&&
//相对于起始地址,位移2个int,就是8个字节
&&&&public
[DllImport("ExportFun.dll", EntryPoint = "mymath3")]
private static extern IntPtr mymath3();
IntPtr pT = mymath3();
myStruct_t mt = new myStruct_t();
mt = (myStruct_t)Marshal.PtrToStructure(pT, mt.GetType());
在这里我们看到了,在C#中一定要在重新定义一下接口中的结构体,同时要指定各成员的排列情况(假定C++Dll是在32位机上编译的)。
然后,同样,mymath3()的返回值类型声明为IntPtr,使用时直接调用mymath3(),此时,pT指向的内存地址是Native的,非托管类型。然后,定义一个C#的结构体变量,之后调用Marshal.PtrToStructure操作,将Native上的结构体数据内容拷贝至托管数据mt上。
所以,C#定义结构体时要指定Native上的内存的排列,否则无法将有效数据Copy至托管类变量上。
当然,如果结构体char
c后面还有成员变量,那就要注意内存对齐的问题了。(至少默认情况下编译器时会进行内存对齐的,这个问题我之前的文章提到过了)
还有复杂的数据,以后再添加了。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&C# 调用C语言接口问题C#调用C语言接口问题InteropS将报文-知识宝库
你可能对下面的信息感兴趣

我要回帖

更多关于 c 调用webservice接口 的文章

 

随机推荐