首页 > 编程 > .NET > 正文

VB.NET特性---- Dllimport特性

2024-07-10 13:05:03
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,
我们可以使用declare语句调用外部dll中的过程。但vb.net给我们提供了另外一种更加先进的----- dllimport特性。

如:

imports system.runtime.interopservices



<dllimport("user32")> _

function findwindow(byval lpclassname as string, byval lpwindowname as string) as integer



end function



<dllimport("user32")> _

function movewindow(byval hwnd as string, byval x as integer, byval y as integer, byval nwidth as integer, byval nheight as integer, byval brepaint as integer) as integer





end function



sub test()



dim hwnd as integer = findwindow(nothing, "untitled-nodepad")

if hwnd <> 0 then movewindow(hwnd, 0, 0, 600, 300, 1)



end sub



这样就可以不任何代码实现便可以调用外部的dll,即使我们改变方法名为findwindowa,也可以顺利的实现调用,因为使用dllimport特性编译器可以自动追踪实际的过程以及方法!

另外,dllimport特性海支持几种可选的参数,来精确定义调用外部过程的方式,以及外部过程的返回值方式.

charset 参数:用于说明字符串传递给外部过程的方式,可以是charset.ansi(默认),charset.unicode.charset.auto.



exactspelling参数:用于指定方法名是否和dll中的名称完全一致,默认值为true.



entrypoint参数:用于指定dll中的实际函数名称.



callingconvention参数:为入口点指定调用的约定,值有winapi(默认 值),cdecl,fastcallstdcall和thiscall.



setlasterror参数:判断被调用函数是否设置了最近一次win32错误代码,如果设置为true 则可以通过err.lastdllerror方法或marshal.getlastwin32error方法 读取这些代码.



preservesig参数:为一个boolean值,如果为true ,则将告诉编译器,方法不应被转换为一 个返回hresult值函数.





下面使用dllimport特性来调用myfunction.dll中的名为friend(friend为vb保留名称)的方法.dllimport特性带有unicode字符串,并影响win32错误代码:



<dllimport("myfunction.dll", entrypoint:="friend", charset:=charset.unicode, setlasterror:=true)> _

function makefriends(byval sl as string, byval s2 as string) as integer



end function

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表