vb.net如何调用api

cacodaemon 2002-09-09 11:32:41
在vb.net中如何调用api函数?
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Montaque 2002-09-10
  • 打赏
  • 举报
回复
给你一个调用api的例子。
我把它打包导一个calss里面了。内容如下
是从文件信息中获取图标。SHGetFileInfo为API

Imports System
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.IO

Public Class IconExtractor

Private Const SHGFI_SMALLICON = &H1
Private Const SHGFI_LARGEICON = &H0
Private Const SHGFI_ICON = &H100
Private Const SHGFI_USEFILEATTRIBUTES = &H10

Public Enum IconSize
SmallIcon = SHGFI_SMALLICON
LargeIcon = SHGFI_LARGEICON
End Enum

<StructLayout(LayoutKind.Sequential)> _
Private Structure SHFILEINFO
' pointer to icon handle
Public hIcon As IntPtr
' icon index
Public iIcon As Integer
' not used in this example
Public dwAttributes As Integer
' file pathname--marshal this as
' an unmanaged LPSTR of MAX_SIZE
<MarshalAs(UnmanagedType.LPStr, SizeConst:=260)> _
Public szDisplayName As String
' file type--marshal as unmanaged
' LPSTR of 80 chars
<MarshalAs(UnmanagedType.LPStr, SizeConst:=80)> _
Public szTypeName As String
End Structure

Private Declare Auto Function SHGetFileInfo _
Lib "shell32" (ByVal pszPath As String, ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, _
ByVal cbFileInfo As Integer, ByVal uFlags As Integer) As Integer



Private Shared Function GetIcon(ByVal fsi As FileSystemInfo, ByVal anIconSize As Integer) As Icon

Dim aSHFileInfo As New SHFILEINFO()
Dim cbFileInfo As Integer = Marshal.SizeOf(aSHFileInfo)
Dim uflags As Integer = SHGFI_ICON Or SHGFI_USEFILEATTRIBUTES Or anIconSize
Try
SHGetFileInfo(fsi.FullName, fsi.Attributes, aSHFileInfo, cbFileInfo, uflags)
Return Icon.FromHandle(aSHFileInfo.hIcon)
Catch ex As Exception
Return Nothing
End Try
End Function

End Class



---------------------------------------------------------
Montaque==Digitalboy==Houyongfeng==Monkey
cacodaemon 2002-09-10
  • 打赏
  • 举报
回复
thx
tg123 2002-09-09
  • 打赏
  • 举报
回复
何vb6一样
Latitude 2002-09-09
  • 打赏
  • 举报
回复
这个问题不能太简单回答。因为API的情况太多,vb.net与vb6中主要的区别有如下几个方面:
1)参数的any类型没有了,也就是说,你必须要给形参根据使用的情况指定它的类型,不能再as any了。
2)原来参数里用到的结构,是用type定义的,但现在是要改为用structure
3)string*32这样的定义不行了,应该用:
<VBFixedString(32)> Public LastName As String
4)hwnd比较麻烦,你在本版搜索一下有关讨论
5)有关vb与vb6格式上的区别,请看本版FAQ中我写的关于格式转换的贴子
6)不同的情况,不同的使用。但大部分API可以拿来就用,或稍作修改即可。

----
Good Luck!
有具体问题再讨论。

by Henry
zxz_gate 2002-09-09
  • 打赏
  • 举报
回复
vb.net 完全可以调用API,方法和VB6 一样。
不过Type 变成了 Structure。
cacodaemon 2002-09-09
  • 打赏
  • 举报
回复
谢谢你的回答,可我还是不明白,能否详细点?
bondzhou 2002-09-09
  • 打赏
  • 举报
回复
有过一个类似的帖子,可以查查看。好像.NET不能象VB那样调用API了,.NET都统一到CRT中了,呵呵,managed code

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧