分享
 
 
 

如何调用win32api和其他组件库(.net).

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

来自:http://www.gotdotnet.com

Platform Invoke Samples

This document contains the release information for the set of platform invoke samples. You will find the following sections below:

Sample Overview

How to Use Platform Invoke Attributes

How to Marshal Strings

How to Marshal Structures and Unions

How to Marshal Arrays

Miscellaneous

Requirements

Location of the Samples

Building and Running the Samples

·

Sample Overview

The platform invoke samples demonstrate how to call functions exported from an unmanaged library: how to declare different types, how to use available attributes to modify default behavior, how to use methods of the Marshal class when needed, and which aspects of garbage collection and threading could affect results.

Some of the samples use functions exported from Windows libraries and some use functions exported from a custom library. Here is the summary of the topics demonstrated and where are the sources located.

How to Use Platform Invoke Attributes

EntryPoint

Renames a function for use in managed code.

WinAPIs\CS\MsgBox.cs

WinAPIs\VB\MsgBox.vb

CharSet

Chooses how strings are marshaled; also affects the function name search criteria.

ExactSpelling

Indicates whether the name of the entry point in the unmanaged DLL should be modified to correspond to the CharSet value.

CallingConvention

Calls functions with varargs or calls methods of exported classes.

WinAPIs\CS\Printf.cs

WinAPIs\VB\Printf.vb

Custom\CS\ClassMethods.cs

Custom\VB\ClassMethods.vb

PreserveSig

Modifies functions that return HRESULTs.

WinAPIs\CS\CreateObject.cs

WinAPIs\VB\CreateObject.vb

SetLastError

Guarantees that the error code is saved after a function call.

WinAPIs\CS\Errors.cs

WinAPIs\VB\Errors.vb

How to Marshal Strings

string ByVal

Passes a string as an In parameter.

WinAPIs\CS\MsgBox.cs

WinAPIs\VB\MsgBox.vb

string as result

Returns a string from unmanaged code.

Custom\CS\Strings.cs

Custom\VB\Strings.vb

string ByRef

Passes a string as an In/Out parameter using StringBuilder.

WinAPIs\CS\Buffers.cs

WinAPIs\VB\Buffers.vb

string in structure ByVal

Passes a string in a structure and the structure is an In parameter.

Custom\CS\Stucts.cs

Custom\VB\Structs.vb

string in structure ByRef (char*)

Passes a string in a structure and the structure is an In/Out parameter. Unmanaged side expects a pointer to character buffer. Size of the buffer is usually passed as another member of the structure.

Custom\CS\Strings.cs

Custom\VB\Strings.vb

string in structure ByRef (char[])

Passes a string in a structure and the structure is an In/Out parameter. Unmanaged side expects embedded character buffer.

WinAPIs\CS\OSInfo.cs

WinAPIs\VB\OSInfo.vb

string in class ByVal (char*)

Passes a string in a class, which is always an In/Out parameter since it is a reference type. Unmanaged side expects a pointer to character buffer.

WinAPIs\CS\OpenFileDlg.cs

WinAPIs\VB\OpenFileDlg.vb

string in class ByVal (char[])

Passes a string in a class, which is always an In/Out parameter since it is a reference type. Unmanaged side expects embedded character buffer.

WinAPIs\CS\OSInfo.cs

WinAPIs\VB\OSInfo.vb

array of strings ByVal

Passes an array of strings ByVal.

Custom\CS\Arrays.cs

Custom\VB\Arrays.vb

array of structures that contain strings ByVal

Passes an array of structures that contain strings ByVal.

How to Marshal Structures and Unions

structure ByVal

Passes a structure as an In parameter.

Custom\CS\Stucts.cs

Custom\VB\Structs.vb

structure ByRef

Passes a structure as an In/Out parameter.

WinAPIs\CS\OSInfo.cs

WinAPIs\VB\OSInfo.vb

class ByVal

Copies a class with only integer members as an In/Out parameter like in managed case.

WinAPIs\CS\SysTime.cs

WinAPIs\VB\SysTime.vb

structure with nested structures (flattened)

Produces a class that represents a structure with nested structures on unmanaged side. Structure is flattened in one big structure on managed side.

WinAPIs\CS\FindFile.cs

WinAPIs\VB\FindFile.vb

structure with nested structures (not flattened)

Passes a structure with an embedded structure.

Custom\CS\Stucts.cs

Custom\VB\Structs.vb

structure that contains pointer to another structure

Passes a structure that contains a pointer to another structure as a member.

array of structures that contain only integers ByVal

Passes an array of structures that contain only integers as the In parameter. Members of array can be changed.

Custom\CS\Arrays.cs

Custom\VB\Arrays.vb

array of structures that contain integers and strings ByRef

Passes an array of structures that contain integers and strings as the Out parameter. Calee allocates memory for the array.

Custom\CS\OutArrayOfStructs.cs

Custom\VB\OutArrayOfStructs.vb

unions with value types

Passes a union with value types (integer and double).

Custom\CS\Unions.cs

Custom\VB\Unions.vb

unions with mixed types

Passes a union with mixed types (integer and String).

How to Marshal Arrays

array of integers ByVal

Passes an array of integers as an In parameter.

Custom\CS\Arrays.cs

Custom\VB\Arrays.vb

array of integers ByRef

Passes an array of integers as an In/Out parameter.

2D array of integers ByVal

Passing a matrix of integers as an In parameter.

Miscellaneous

HandleRef

Presents a case when HandleRef needs to be used to prevent garbage collection.

WinAPIs\CS\HandleRef.cs

WinAPIs\VB\HandleRef.vb

function pointers

Passes a delegate to an unmanaged function that expects a function pointer.

Custom\CS\Callback.cs

Custom\VB\Callback.vb

void*

Calls a function that has void* as a parameter.

Custom\CS\Void.cs

Custom\VB\Void.vb

LPARAM

Uses GCHandle to pass a managed object to unmanaged function that expects LPARAM.

WinAPIs\CS\GCHandle.cs

WinAPIs\VB\GCHandle.vb

STA/MTA

Changes the default apartment settings when an unmanaged function calls CoInitialize.

WinAPIs\CS\ActiveDir.cs

WinAPIs\VB\ActiveDir.vb

Requirements

Portions of the samples require .NET Framework and Visual C++ 6.0.

Note: The compiled DLL file is available for unmanaged portion of the sample in case you don’t have Visual Studio 6.0.

Location of the Samples

These samples are located in the Interop\pinvoke directory of the .NET Framework SDK samples directory.

For Example:

C:\Program Files\Microsoft.NET\FrameworkSDK\Samples\Technologies\Interop\pinvoke

These samples contain the following directory structure:

WinAPIs – platform invoke demonstrated with functions exported from Windows libraries

\CS – sources in C#

\VB – sources in VB.NET

Custom – platform invoke demonstrated with functions exported from custom library

\CS - sources in C#

\VB - sources in VB.NET

\LIB – custom library source

Building and Running the Samples

To run these samples, follow the instructions listed below.

1. (optional) Open the PinvokeLib.dsw file in the Custom\LIB directory with Visual Studio 6. Choose Build\Rebuild All from the menu to build library.

2. Go to the pinvoke directory and type nmake all at the prompt to build all samples.

3. Run any EXE file from a command line to see results of calls to unmanaged functions.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有