如何调用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

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值