《.NET平台开发CRM》课件—08非控代码的调用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
PInvoke:
动态链接库的调用
Platform Invocation Services PInvoke调用专指对动态链接库的调用
4
Pinvoke 语法
动态链接库的调用
[DllImport(……)]
<访问修饰符> static extern [返回类型] [函数名](参数 列表)
DllImport是属性:DllImportAttribute
8
PInvoke调用例子(1)
调用user32.dll中的MessageBox
声明: 声明时候所有的类型需匹配对应的语言类型,对c# 应该是: HWND 声明为Int; LPCTSTR声明为string; UINT 声明为int。
9
PInvoke调用例子(1)
调用User32.dll中的MessageBox
int hwnd, string msg, string title, int type );12tlb来自mp工具的使用COM调用
如: tlbimp excel.exe /out:excel.dll
13
COM调用
利用Excel的com接口操作excel文档(读/写)
1. ApplicationClass:代表整个excel对象 2. _Workbook :代表一个excel文档 3. _Worksheet:代表一个文档中的一个sheet
第八章 非控代码的调用
1
教学目标
了解平台调用服务。 理解.NET中的COM调用。
2
1. 非控代码的定义
非控代码
指不被.NET运行环境管理或控制的代码
2. 非控代码的类型 平台调用服务:允许.NET代码访问现有的非控动 态链接库(DLL)中的函数、结构,甚至回调 COM互操作性:在.NET中使用COM组件,以及 在COM应用程序中使用.NET组件
MessageBox对应的c#声明为:
[DllImport(“user32.dll”)] public static extern int MessageBox(
int hwnd, string msg, string title, int type );
10
using System; using System.Runtime.InteropServices; namespace S2306T09_01 {
例:[DllImport(“user32.DLL”)] 导入了user32.dll这样第一个系统动态链接库 可以声明要使用这个链接库中的函数
注意: 返回值和参数列表要同受控代码的声明一一对应 声明的函数名称并非一定是动态链接库中实际的函授名称
5
动态链接库的调用
DllImport的参数:
1. 必须的参数:库文件 2. 可选的常用参数:
class Program {
[DllImport(“user32.DLL")] public static extern int MessageBoxA(int hwnd, string msg, string title, int type); static void Main(string[] args) {
MessageBoxA(int Hwnd,string msg,string title,int type);
7
PInvoke调用例子(1)
调用user32.dll中的MessageBox
原型: int MessageBox( HWND hWnd ,
LPCTSTR lpText , LPCTSTR lpCaption, UINT uType ); HWND是Int型; LPCTSTR是字符串; INT是无符号整型;
例:Chapter08_02
14
什么是非控代码 如何进行PInvoke调用 如何进行COM Interop调用
总结
15
MessageBoxA(0, "P-Invoke", "P9", 1); } } } 例:Chapter08_01
PInvoke调用例子(2)
使用Entry Point改变调用名
MessageBox对应的c#声明为:
[DllImport(“user32.dll”,EntryPoint =“MessageBox”)] public static extern int ShowMessage (
EntryPoint: 指出实际的函数名 CharSet,SetLastError… etc。
6
动态链接库的调用
例:在Windows的核心动态链接库User32.DLL中有一 个MessageBoxA的函数,用于显示一个对话框
首先用DllImport导入User32.DLL [DllImport(“User32.DLL”)] 接着描述函数信息 [private|public|protected|internal]static extern int