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

原创 2002年01月07日 08:31:00

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

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

·                                  

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.

Win32中调用其他应用程序的方法(函数)winexec,shellexecute ,createprocess

WinExec,ShellExecute ,CreateProcess这三个win32API均可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些...
  • sszgg2006
  • sszgg2006
  • 2013年08月23日 22:40
  • 4323

VB调用C#写的WinForm.NET控件

一.前言:   虽然IT开发技术日新月异,不过业界仍然运行着大量的VB系统,这些系统凝聚了不少客户的投资,应当要一定程度的保护和利用。因此也就产生了一种需求,也就是使用旧的开发技术仍然可以使用新技术...
  • ddjj_1980
  • ddjj_1980
  • 2013年04月09日 16:08
  • 1777

在Qt中使用WindowsAPI来控制其他应用程序

有时候我们可能想要让一些桌面应用程序自动地执行一些操作,但是这类程序又没有提供一些批量操作的方法或者编程接口。这时最容易的办法恐怕就是使用WindowsAPI来模拟鼠标或键盘的动作来操作这类应用程序了...
  • yangxiao_0203
  • yangxiao_0203
  • 2013年04月27日 13:20
  • 5931

从.NET平台调用Win32 API(C#调用的dll动态链接库)

原文地址:http://liutiemeng.blog.51cto.com/120361/18764/  特别通俗易懂,不得不分享一下。 作者:刘铁猛 日期:2005-12-20 关键字:C# ...
  • aliza1226
  • aliza1226
  • 2013年06月07日 16:40
  • 992

暴强贴:从.NET平台调用Win32 API

作者:刘铁猛 日期:2005-12-20 关键字:C# .NET Win32 API 版权声明:本文章受知识产权法保护,如果阁下想转载,在转载的时候烦劳阁下连同在下的姓名一起转载,并向blade...
  • huaqianzkh
  • huaqianzkh
  • 2013年08月05日 17:00
  • 334

暴强贴:从.NET平台调用Win32 API

作者:刘铁猛 日期:2005-12-20 关键字:C# .NET Win32 API 版权声明:本文章受知识产权法保护,如果阁下想转载,在转载的时候烦劳阁下连同在下的姓名一起转载,并向blade...
  • yongping8204
  • yongping8204
  • 2012年02月17日 20:30
  • 584

Win32API、MFC、.NET多线程并行求矩阵乘法(星星笔记)

1.运用Win32API实现,程序如下:
  • XX_123_1_RJ
  • XX_123_1_RJ
  • 2014年10月02日 21:20
  • 1658

在.NET中輕鬆快樂叫用Win32 API

在.NET中輕鬆快樂叫用Win32 API
  • dz45693
  • dz45693
  • 2011年05月10日 09:50
  • 2746

Win32API、MFC、.NET并行求数值积分PI(星星笔记)

运用Win32API实现
  • XX_123_1_RJ
  • XX_123_1_RJ
  • 2014年09月29日 21:19
  • 1481

Win32 API .net Class

  • 2008年11月25日 16:45
  • 324KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调用win32api和其他组件库(.net).
举报原因:
原因补充:

(最多只允许输入30个字)