函数句柄是什么意思
答案:2 悬赏:0 手机版
解决时间 2021-12-24 04:02
- 提问者网友:捧腹剧
- 2021-12-23 08:10
函数句柄是什么意思
最佳答案
- 五星知识达人网友:佘樂
- 2021-12-23 08:37
问题一:matlab中函数的句柄是什么意思?有什么作用?最好举个例子说明!不胜感激! 比如定义f(x)=x^2,可以写为
f=@(x)(x.^2)
其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针
f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。
于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等
定义匿名函数时也可以调用别的匿名函数,比如
f1=@(x,y)(x.^2+y.^2)
定义了函数x^2+y^2
f2=@(t)(f1(t,2))
定义了函数t^2+4
f3=@(x)(f1(x(1),x(2)))
定义了函数x(1)^2+x(2)^2
使用匿名函数时一定要注意函数本身的参数形式,如
f1(2,3)
表示2^2+3^2
f2(3)=3
表示3^2+4
f3([1,2])
表示1^2+2^2
说白了就是函数指针
参考资料:引弧greatdju 大哥的讲解问题二:函数句柄和指针的区别是什么 句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。问题三:什么是句柄? 句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。
创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。问题四:“句柄”到底是什么意思 句柄可以理解为操作标示
比如一个程序有好多窗口,每个窗口有好多的属性
如何操作某个窗口就让系统很头疼
于是对不同窗口用不同的标示,窗口句柄
DECLARE_HANDLE 就是HWND
然后好多函数通过这个标示来判断对哪个窗口操作
如 ::SetWindowText( hWnd , strTitle ...
其他的还有好多类型的句柄
想文件句柄,线程句柄等等
句柄不深奥,是翻译者给神话了。就是控制、操作标识!问题五:怎么得到一个句柄呢,是什么函数 ::GetDlgItem(m_hWnd, nID);
GetDlgItem原形:
HWND (_stdcall *GetDlgItem)(HWND,int);
参数:
HWND 为窗口句柄
int 窗口句柄内的控件/子窗口 ID
返回值:
HWND 控件/子窗口 句柄
NULL 父窗口无效/ID无效,GetLastError()查询错误代码。问题六:matlab中函数的句柄是什么意思 比如定义f(x)=x^2,可以写为
f=@(x)(x.^2)
其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针
f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。
于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等
定义匿名函数时也可以调用别的匿名函数,比如
f1=@(x,y)(x.^2+y.^2)
定义了函数x^2+y^2
f2=@(t)(f1(t,2))
定义了函数t^2+4
f3=@(x)(f1(x(1),x(2)))
定义了函数x(1)^2+x(2)^2
使用匿名函数时一定要注意函数本身的参数形式,如
f1(2,3)
表示2^2+3^2
f2(3)=3
表示3^2+4
f3([1,2])
表示1^2+2^2
说白了就是函数指针问题七:MATLAB的函数句柄干嘛用的,具体怎么使用? 最简单的用@符号获取函数句柄。
int(@sin)
或者用inline郸可以,
fun=inline('sin(x)');
int(fun)问题八:实例和句柄的区别是什么? 通常实例就是指对象的实例,如CString myStr; 这里myStr是CString类的一个实例。
句柄有些文章地方也用,一般指实例的指针。如窗口句柄,就是指窗口的指针;Socket句柄就是指某个Socket的指针。问题九:这些函数是什么意思? 第一个VB声明编辑
Declare Function GetModuleHandle Lib kernel32 Alias GetModuleHandleA (ByVal lpModuleName As String) As Long说明获取一个应用程序或动态链接库的模块句柄返回值Long,如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError参数表参数 类型及说明lpModuleName String,指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD注解只有在当前进程的场景中,这个句柄才会有效
2VC声明编辑
12
HMODULEGetModuleHandle(LPCTSTRlpModuleName);
功能说明获取一个特定的应用程序或动态链接库的模块句柄,且这个模块必须已经被加载到调用者的进程空间中。参数说明lpModuleName 模块名称返回值如执行成功成功,则返回模块句柄。零表示失败。通过GetLastError获得错误信息如:
1
GetModuleHandle(NULL);
这将返回自身应用程序句柄注意前提是:只有欲获取的模块已映射到调用该函数的进程内,才会正确得到模块句柄。常用模块映射函数:LoadLibrary(..)。
3WIN32汇编声明编辑
GetModuleHandle,lpModuleName函数的作用是返回指定模块名的句柄,如果为NULL,则返回本模块的句柄。返回的句柄值存放在寄存器eax中。lpModuleName参数是一个指向含有模块名称字符串的指针;使用举例:
123456789101112131415161718
.686p.xmm.mmx.modelflat,stdcalloptioncasemap:none.dataszUserDlldb'User32.dll',0.data?hUserDllHandledd?sbErrorinvokeExitProcess,0start:invokeGetModuleHandle,offsetszUserDlltesteax,eaxjesbErrormovhUserDllHandle,eaxendstart...
4易语言声明编辑
Ansi版本:.版本 2.DLL命令 GetModuleHandleA, 整数型, kernel32.dll, GetModuleHandleA.参数 lpModuleName, 文本型Unicode版本:.版本 2.DLL命令 GetModuleHandleW, 整数型, kernel32.dll, GetModuleHandleW.参数 lpModuleName, 字节集
第二个
当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限。
目录
1对应函数
2说明
? 参数 ? 返回值
1对应函数编辑
VC声明DWORD WaitForSingleObject(
HANDLE hHandle,
......余下全文>>
f=@(x)(x.^2)
其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针
f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。
于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等
定义匿名函数时也可以调用别的匿名函数,比如
f1=@(x,y)(x.^2+y.^2)
定义了函数x^2+y^2
f2=@(t)(f1(t,2))
定义了函数t^2+4
f3=@(x)(f1(x(1),x(2)))
定义了函数x(1)^2+x(2)^2
使用匿名函数时一定要注意函数本身的参数形式,如
f1(2,3)
表示2^2+3^2
f2(3)=3
表示3^2+4
f3([1,2])
表示1^2+2^2
说白了就是函数指针
参考资料:引弧greatdju 大哥的讲解问题二:函数句柄和指针的区别是什么 句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。问题三:什么是句柄? 句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。
创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。问题四:“句柄”到底是什么意思 句柄可以理解为操作标示
比如一个程序有好多窗口,每个窗口有好多的属性
如何操作某个窗口就让系统很头疼
于是对不同窗口用不同的标示,窗口句柄
DECLARE_HANDLE 就是HWND
然后好多函数通过这个标示来判断对哪个窗口操作
如 ::SetWindowText( hWnd , strTitle ...
其他的还有好多类型的句柄
想文件句柄,线程句柄等等
句柄不深奥,是翻译者给神话了。就是控制、操作标识!问题五:怎么得到一个句柄呢,是什么函数 ::GetDlgItem(m_hWnd, nID);
GetDlgItem原形:
HWND (_stdcall *GetDlgItem)(HWND,int);
参数:
HWND 为窗口句柄
int 窗口句柄内的控件/子窗口 ID
返回值:
HWND 控件/子窗口 句柄
NULL 父窗口无效/ID无效,GetLastError()查询错误代码。问题六:matlab中函数的句柄是什么意思 比如定义f(x)=x^2,可以写为
f=@(x)(x.^2)
其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针
f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。
于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等
定义匿名函数时也可以调用别的匿名函数,比如
f1=@(x,y)(x.^2+y.^2)
定义了函数x^2+y^2
f2=@(t)(f1(t,2))
定义了函数t^2+4
f3=@(x)(f1(x(1),x(2)))
定义了函数x(1)^2+x(2)^2
使用匿名函数时一定要注意函数本身的参数形式,如
f1(2,3)
表示2^2+3^2
f2(3)=3
表示3^2+4
f3([1,2])
表示1^2+2^2
说白了就是函数指针问题七:MATLAB的函数句柄干嘛用的,具体怎么使用? 最简单的用@符号获取函数句柄。
int(@sin)
或者用inline郸可以,
fun=inline('sin(x)');
int(fun)问题八:实例和句柄的区别是什么? 通常实例就是指对象的实例,如CString myStr; 这里myStr是CString类的一个实例。
句柄有些文章地方也用,一般指实例的指针。如窗口句柄,就是指窗口的指针;Socket句柄就是指某个Socket的指针。问题九:这些函数是什么意思? 第一个VB声明编辑
Declare Function GetModuleHandle Lib kernel32 Alias GetModuleHandleA (ByVal lpModuleName As String) As Long说明获取一个应用程序或动态链接库的模块句柄返回值Long,如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError参数表参数 类型及说明lpModuleName String,指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD注解只有在当前进程的场景中,这个句柄才会有效
2VC声明编辑
12
HMODULEGetModuleHandle(LPCTSTRlpModuleName);
功能说明获取一个特定的应用程序或动态链接库的模块句柄,且这个模块必须已经被加载到调用者的进程空间中。参数说明lpModuleName 模块名称返回值如执行成功成功,则返回模块句柄。零表示失败。通过GetLastError获得错误信息如:
1
GetModuleHandle(NULL);
这将返回自身应用程序句柄注意前提是:只有欲获取的模块已映射到调用该函数的进程内,才会正确得到模块句柄。常用模块映射函数:LoadLibrary(..)。
3WIN32汇编声明编辑
GetModuleHandle,lpModuleName函数的作用是返回指定模块名的句柄,如果为NULL,则返回本模块的句柄。返回的句柄值存放在寄存器eax中。lpModuleName参数是一个指向含有模块名称字符串的指针;使用举例:
123456789101112131415161718
.686p.xmm.mmx.modelflat,stdcalloptioncasemap:none.dataszUserDlldb'User32.dll',0.data?hUserDllHandledd?sbErrorinvokeExitProcess,0start:invokeGetModuleHandle,offsetszUserDlltesteax,eaxjesbErrormovhUserDllHandle,eaxendstart...
4易语言声明编辑
Ansi版本:.版本 2.DLL命令 GetModuleHandleA, 整数型, kernel32.dll, GetModuleHandleA.参数 lpModuleName, 文本型Unicode版本:.版本 2.DLL命令 GetModuleHandleW, 整数型, kernel32.dll, GetModuleHandleW.参数 lpModuleName, 字节集
第二个
当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限。
目录
1对应函数
2说明
? 参数 ? 返回值
1对应函数编辑
VC声明DWORD WaitForSingleObject(
HANDLE hHandle,
......余下全文>>
全部回答
- 1楼网友:白昼之月
- 2021-12-23 09:30
感谢回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯