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

来自: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

<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 4in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-borde

Published At
Categories with Web编程
Tagged with
comments powered by Disqus