|
如何调用win32api和其他组件库(.net).
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 AttributesEntryPoint
Renames a function for use in managed code.
WinAPIs\CS\MsgBox.cs
WinAPIs\VB\MsgBox.vbCharSet
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.vbPreserveSig
Modifies functions that return HRESULTs.
WinAPIs\CS\CreateObject.cs
WinAPIs\VB\CreateObject.vbSetLastError
Guarantees that the error code is saved after a function call.
WinAPIs\CS\Errors.cs
WinAPIs\VB\Errors.vb
How to Marshal Stringsstring ByVal
Passes a string as an In parameter.
WinAPIs\CS\MsgBox.cs
WinAPIs\VB\MsgBox.vbstring as result
Returns a string from unmanaged code.
Custom\CS\Strings.cs
Custom\VB\Strings.vbstring ByRef
Passes a string as an In/Out parameter using StringBuilder.
WinAPIs\CS\Buffers.cs
WinAPIs\VB\Buffers.vbstring in structure ByVal
Passes a string in a structure and the structure is an In parameter.
Custom\CS\Stucts.cs
Custom\VB\Structs.vbstring 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.vbstring 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.vbstring 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.vbstring 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.vbarray of strings ByVal
Passes an array of strings ByVal.
Custom\CS\Arrays.cs
Custom\VB\Arrays.vbarray of structures that contain strings ByVal
Passes an array of structures that contain strings ByVal.
How to Marshal Structures and Unionsstructure ByVal
Passes a structure as an In parameter.
Custom\CS\Stucts.cs
Custom\VB\Structs.vbstructure ByRef
Passes a structure as an In/Out parameter.
WinAPIs\CS\OSInfo.cs
WinAPIs\VB\OSInfo.vbclass ByVal
Copies a class with only integer members as an In/Out parameter like in managed case.
WinAPIs\CS\SysTime.cs
WinAPIs\VB\SysTime.vbstructure 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.vbstructure with nested structures (not flattened)
Passes a structure with an embedded structure.
Custom\CS\Stucts.cs
Custom\VB\Structs.vbstructure 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.vbarray 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.vbunions with value types
Passes a union with value types (integer and double).
Custom\CS\Unions.cs
Custom\VB\Unions.vbunions with mixed types
Passes a union with mixed types (integer and String).
How to Marshal Arraysarray of integers ByVal
Passes an array of integers as an In parameter.
Custom\CS\Arrays.cs
Custom\VB\Arrays.vbarray 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.
MiscellaneousHandleRef
Presents a case when HandleRef needs to be used to prevent garbage collection.
WinAPIs\CS\HandleRef.cs
WinAPIs\VB\HandleRef.vbfunction pointers
Passes a delegate to an unmanaged function that expects a function pointer.
Custom\CS\Callback.cs
Custom\VB\Callback.vbvoid*
Calls a function that has void* as a parameter.
Custom\CS\Void.cs
Custom\VB\Void.vbLPARAM
Uses GCHandle to pass a managed object to unmanaged function that expects LPARAM.
WinAPIs\CS\GCHandle.cs
WinAPIs\VB\GCHandle.vbSTA/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 samplein 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.
1页 > 2页 >
查看上一页
返回分类首页 返回96PC首页
查看下一页 |