为什么微软的__stdcall函数不乱名? [问题点数:100分,结帖人yangglemu]

Bbs2
本版专家分:369
Blank
黄花 2011年1月 移动平台大版内专家分月排行榜第二
结帖率 100%
Bbs6
本版专家分:7991
Blank
红花 2009年1月 Linux/Unix社区大版内专家分月排行榜第一
Blank
黄花 2008年12月 Linux/Unix社区大版内专家分月排行榜第二
Blank
蓝花 2009年3月 Linux/Unix社区大版内专家分月排行榜第三
Bbs7
本版专家分:24085
Blank
红花 2010年2月 VC/MFC大版内专家分月排行榜第一
Blank
蓝花 2010年3月 VC/MFC大版内专家分月排行榜第三
Bbs4
本版专家分:1636
Bbs5
本版专家分:3495
Bbs7
本版专家分:24085
Blank
红花 2010年2月 VC/MFC大版内专家分月排行榜第一
Blank
蓝花 2010年3月 VC/MFC大版内专家分月排行榜第三
Bbs7
本版专家分:22457
Blank
黄花 2010年2月 VC/MFC大版内专家分月排行榜第二
Bbs9
本版专家分:77670
Blank
黄花 2010年8月 VC/MFC大版内专家分月排行榜第二
Blank
蓝花 2010年7月 VC/MFC大版内专家分月排行榜第三
2010年6月 VC/MFC大版内专家分月排行榜第三
Bbs7
本版专家分:22457
Blank
黄花 2010年2月 VC/MFC大版内专家分月排行榜第二
Bbs2
本版专家分:388
Bbs2
本版专家分:369
Blank
黄花 2011年1月 移动平台大版内专家分月排行榜第二
Bbs3
本版专家分:879
Bbs2
本版专家分:369
Blank
黄花 2011年1月 移动平台大版内专家分月排行榜第二
Bbs7
本版专家分:22767
Bbs4
本版专家分:1782
Bbs2
本版专家分:369
Blank
黄花 2011年1月 移动平台大版内专家分月排行榜第二
Bbs5
本版专家分:4225
Blank
黄花 2010年8月 C++ Builder大版内专家分月排行榜第二
2008年4月 C++ Builder大版内专家分月排行榜第二
2008年3月 C++ Builder大版内专家分月排行榜第二
2008年2月 C++ Builder大版内专家分月排行榜第二
2007年12月 C++ Builder大版内专家分月排行榜第二
2007年9月 C++ Builder大版内专家分月排行榜第二
Blank
蓝花 2010年7月 C++ Builder大版内专家分月排行榜第三
2008年5月 C++ Builder大版内专家分月排行榜第三
2007年10月 C++ Builder大版内专家分月排行榜第三
Bbs2
本版专家分:369
Blank
黄花 2011年1月 移动平台大版内专家分月排行榜第二
Bbs1
本版专家分:5
菜鸟问题:_stdcall、__stdcall的问题
请问_<em>stdcall</em>、__<em>stdcall</em>是什么含义?__cdecl和__fastcall与__<em>stdcall</em>又有何区别?从msdn的字面上看,__cdecl是由调用者来清理栈空间(具体清理什么?参数?),rn并将参数倒序入栈,__<em>stdcall</em>则由被调用者来清理栈空间,而__fasscall好像还要将rn参数写入寄存器中。不知道我理解的对不对?另外ECX是什么意思(thiscall的帮助中)?平时我们的<em>函数</em>调用一般是用__cdecl吗?各位大侠有何体会和见解???
_stdcall和__stdcall起什么作用
_<em>stdcall</em>和__<em>stdcall</em>起什么作用
为什么微软。。。
<em>为什么</em><em>微软</em>的中文站点好多都是99年更新的?rn<em>为什么</em>Microsoft Visual Studio 6.0用美元一千多,换成人民币就成了两万?rn<em>为什么</em>好多ie的漏洞在开发时就知道,非要发布了再提供下载补丁?rn<em>为什么</em>没人告诉我?
之前不乱之后乱
dataset的数据往数据库插入,设断点跟踪了一下,没写入数据库之前正常,写入数据库之后在数据库里显示乱码了?怎么回事呢?高手指点下。rn
乱码不乱,百分相送!
A.jsp源文件:rnrn..............rn rn rn 可见rn rn 不可见rn rn rn.............rn编译后的A_jsp.java文件:rn...............rn out.write("\r\n");rn out.write(" \r\n");rn out.write(" ");rn if (aFeatureLayer.isVisible()) rn out.write("\r\n");rn out.write(" 驴��录没\r\n");rn out.write(" ");rn else rn out.write("\r\n");rn out.write(" 虏禄驴��录没\r\n");rn out.write(" ");rnrn out.write("\r\n");rn out.write(" \r\n");rn...............rn其中:“可见”变为“驴��录没”,“不可见”变为“虏禄驴��录没”。rnrn结果网页在IE编码为GB2312的情况如下:rnboundary 可见 rntract 可见 rnsc_streets 可见 rnrivers 可见 rnhospital 可见 rncities 可见 rntopoq24 不可见 rn也就是说网页结果显示正确。但是当源文件中写为时,即S改为小写s,这时结果网页中文为“?”。rnrn现在的问题是:rn1、有明确的charSet和charset区别的说法吗?rn2、<em>为什么</em>在中间的_jsp.java中是乱码,不知道大家的情况如何。这其中是什么原理?如要保证_jsp.java中不出现乱码应该怎么做。谢谢!rn
我的心不乱
2004年我写过一篇博客,我的心太乱。 但是,前段时间去了中国软件博览会,发现我的心不需要乱啦。 在软博会上,遇到了多家中国企业,反倒是外国的厂商少了,软件都开始分地域,各个省区联合展览。 影响比较深的是deep ,一个做linux优化的桌面的厂家, 当然,<em>微软</em>给人影响深刻,软硬一起搞了,HoloLens期待呀,就是价格不菲。 百度、腾讯、阿里互相在竞争,软件似乎呈现蓬勃发展之势,讯飞的
__stdcall函数是不是不能用函数指针?
写了一个程序,里面用到<em>函数</em>指针,如果指向的<em>函数</em>是__cdecl的,那么就没问题,但是只要是__<em>stdcall</em>的,就崩溃了,错误提示居然是0x00000000指令引用的0x00000000内存不能读rn<em>函数</em>指针默认是__cdecl的,而指向__<em>stdcall</em>后,多参数的<em>函数</em>入口就不知道怎么搞的错位了,例如这两个<em>函数</em>:rnvoid __<em>stdcall</em> Write(const char *);rnvoid __<em>stdcall</em> WriteEx(const char *, int);rn然后用指针指向它们:rnvoid (*func)();rnif (i)rnrn func = &WriteEx;rnrnelsernrn func = &Write;rnrn我用错误日志跟踪,发现第二个<em>函数</em>的第二个参数,指定本来是1,但是日志里却是4007417,这是怎么回事?rn这有什么办法解决么?rn
delphi 调用 C 的 __stdcall函数 抱错
大家好,菜鸟又有问题了,我用c++写的dll delphi调用时一启动就抱找不到地址....rn请各位知情的大大帮帮我哈!好象c++自己都用不了__<em>stdcall</em>这种<em>函数</em>,好像VB可以..迷盲了..rn[c]rnextern "C" __declspec(dllexport) void __<em>stdcall</em> geti(int &i);rnrn i = 34234;rnrnrn[delphi调用]rnprocedure geti(var i:integer);<em>stdcall</em>;external'test.dll'rn...rnvar tm :integer;rn...rngeti(tm)rnrn一启动就报找不到地址....晕
加在函数开头的__stdcall的作用是什么呢?
加在<em>函数</em>开头的__<em>stdcall</em>的作用是什么呢?谁能详细的说明一下,给分
函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
<em>函数</em>的调用规则(__cdecl,__<em>stdcall</em>,__fastcall,__pascal) 关于<em>函数</em>的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是__cdecl方式,而windows API则是__<em>stdcall</em>,如果用vc开发dll给其他语言用,则应该指定__<em>stdcall</em>方式。堆栈由谁清除这个很重要,如果是要写汇编<em>函数</em>给C调用,一定要小心堆栈的清除工作,如果是__cdecl方式的<em>函数</em>,则<em>函数</em>本身(如果不用汇编写)则不需要关心保存参数的堆栈的清除,但是如果是__<em>stdcall</em>的规则,一定要在<em>函数</em>退出(ret)前恢复堆栈。
怎样用__stdcall规则输出dll函数
我在编dll输出<em>函数</em>时使用了__<em>stdcall</em>规则,例如<em>函数</em>__declspec(dllexport) int __<em>stdcall</em> Add(int,int),我知道用默认的C++编译会自动给<em>函数</em>名增加一些东西(用PE工具查看为“?Add@@YGHHH@Z”),因此我在前面加上了extern "C",结果该名称变为“_Add@8”(我以为直接就是“Add”了)。rnrn我的问题是,我想通过GetProcAddress从外部调用dll里面的<em>函数</em>,但是使用__<em>stdcall</em>规则后,必须使用“_Add@8”而不是直接的“Add”<em>函数</em>名称,才能找到这个<em>函数</em>。很奇怪的是Windows的API<em>函数</em>都是__<em>stdcall</em>调用规则,但是我试着从User32.dll中调用“MessageBoxA”(就这个名称,没有其它的东西了)都可以成功调用。rnrn我用的是VS2003编译器,请大侠指教了!
我想构造个stdcall函数
常听说STDCALL,不知下面的写法(<em>函数</em>和调用)对不对,请高手指教:rn这是调用:rna dd 0rnb dd 0rnc dd 0rnd dd 0rn.........rn........rnpush arnpush brnpush crncall abcrnmov d,eaxrnrn;;;;;;;<em>函数</em>abc是这样的rnBeginProc abcrnrnLocal aa:DWORDrnLOCAL bb:DWORDrnLOCAL cc:DWORDrnrnmov aa,dword ptr [esp]rnmov bb,dword ptr [esp+4h]rnmov cc,dword ptr [esp+8h]rn;;;;;;;这里是否是aa=a,bb=b,cc=c?rn........rn........rnxor eax,eaxrnrnret 0ch ;清栈rnrnEndProc abcrn
怎样调用动态加载的dll中的stdcall函数
<em>stdcall</em><em>函数</em>在链接之后会自动加上前后缀,例如<em>函数</em>void fun()这个就需要在GetProcAddress中使用_fun@0才能调用,不知道有没有什么办法可以直接使用fun这个名字来找到相应的<em>函数</em>指针,同时又使用<em>stdcall</em>(以便VB、Delphi等语言的程序也能调用)rn顺便确认一下,在VB之类的语言中调用<em>stdcall</em>的<em>函数</em>fun,就直接使用fun就可以了,不用使用_fun@0吧?
名命检测函数
VB2005中有没有命名是否合法的检测<em>函数</em>?比如文件名、数据库中表名、字段名等在新建时要判断命名是否合法,VB2005中没有带这样的判断<em>函数</em>?如果没有哪位好人把代码发上来共享一下!
函数的过程名
网页程序<em>函数</em>的过程名 目前产品展示,显示的一列,想改为两列,不两何修改
我汇编的stdcall函数,请大家指正。
[code=C/C++]rn#include rnextern __<em>stdcall</em> int Show(int,int); rnint main(int argc,char** argv) rnShow(1,4); rnreturn 0; rn rn[/code]­rn[code=Assembly]rnglobal _Show@8 rnextern _printf rnsegment .data rnmsg db "Show a Message(%d,%d)",0 rnsection .text rn_Show@8: rnpush ebp rnmov ebp,esp rn;<em>函数</em>代码开始 rnpush dword [ebp+12] rnpush dword [ebp+8] rnpush dword msg rncall _printf rn;返回值 rnmov eax,0 rn;<em>函数</em>代码结束 rnmov esp,ebp rnpop ebp rnret 8 rn;相当于C语言代码(我没有处理printf<em>函数</em>处的堆栈,所以不算是完全等价):rn;int __<em>stdcall</em> Show(int a,int b)rn; printf("Show a Message(%d,%d)",a,b);rn; return 0;rn;rn[/code]rn­rn练习混编用的makefile rnasm := nasm -f win32 rncc := gcc -O4 -Wall -pedantic -c rncpp := g++ -O4 -Wall -pedantic -c rnld := gcc rnsrcdir := src rnincdir := inc rnbindir := bin rntmpdir := tmp rnlibdir := lib rncntdir := center rncfs := $(shell dir $(srcdir)\*.c /B) rncfs := $(cfs:%.c=$(tmpdir)/%.o) rnafs := $(shell dir $(srcdir)\*.asm /B) rnafs := $(afs:%.asm=$(tmpdir)/%.oa) rn$(tmpdir)/%.o:$(srcdir)/%.c rn$(cc) $(<) -o $(@) rn.PHONY:all clear build go new rn­rnall:$(cfs) $(afs) rn$(ld) $(cfs) $(afs) -o $(bindir)/test.exe rn­rnclear: rndel $(tmpdir)/*.* /s /q rnbuild: rnmkdir $(srcdir) rnmkdir $(incdir) rnmkdir $(bindir) rnmkdir $(tmpdir) rnmkdir $(libdir) rngo: rn$(bindir)/test.exe rnnew: rncopy $(cntdir)\Template\*.* $(srcdir)
¤¤¤解释执行stdcall规范的API函数¤¤¤
本文介绍如何让你的脚本解释程序解释执行<em>stdcall</em>规范的API<em>函数</em>rn你需要有汇编语言基础,在编写动态调用API程序的时候才用得到,rn不废话了开始!rn调用API的关键所在就是接口的整理,比如我们在Delphi里面调用APIrn如:rnTSendMessage = Function(hWnd: HWND; rn Msg: UINT; rn wParam: WPARAM; rn lParam: LPARAM): LRESULT; <em>stdcall</em>;rnrnVar rn SMG : TSendMessage;rnrnSMG := GetProcAddress(...);rnrn然后我们就可以调用SendMessage<em>函数</em>了,但是我们想一想,如果我们rn要写自己的解释程序,难道什么接口我们都在Delphi里定义好,这显然rn不正确,因此就有了本文的研究。rn本文的核心:让你的程序适应在不需要事先定义任何接口的情况下,根rn据用户自定义的接口调用几乎所有形式的<em>stdcall</em>规范的API<em>函数</em>。rnrn//定义API最多的参数个数,如果换动态数组就不需要了rnConstrn APIParamaMax = 10;rn APIParamaSize = 8;rnrnTypern //API参数描述rn TAPIParama = Recordrn ParamType : LongWord; //参数类型rn Address : Pointer; //参数地址rn end;rn PAPIParama = ^TAPIParama;rnrn TAPIParamList = array of TAPIParama; //参数列表rn PAPIParamList = ^TAPIParamList; //列表指针rnrn一看TAPIParama的定义,估计很多朋友就明白了,我们需要分两步走,rn第一步,整理用户的调用数据,第二步根据这个列表调用API<em>函数</em>rnrnrn我们再定义一些常量rnAPI Param Typesrn atNULL = $000; //作为返回值类型时,舍弃返回值rnrn atByte = $001;rn atShortint = $002;rn atSmallint = $003;rn atWord = $004;rn atInteger = $005;rn atLongWord = $006;rn atLongint = $007;rn atCardinal = $008;rnrn atInt64 = $009;rnrn atReal = $00A;rn atSingle = $00B;rn atReal48 = $00C; //放弃rn atDouble = $00D;rn atComp = $00E;rn atCurrency = $00F;rnrn atExtended = $010;rnrn atVarPointer = $011;rn atBoolean = $012;rn atLongBOOL = $013;rn atObject = $014;rnrn atProgram = $100; //保存的是API<em>函数</em>地址rn atPointer = $101;rnrnOK,我们开始弄程序rn调用API的主程序rnprocedure DOAPI(ParamList : PAPIParamList ; //一个参数列表rn APIProc , //保存API地址的rn ReturnPara : PAPIParama); <em>stdcall</em>;rn//ReturnPara 如果API是<em>函数</em>并且需要返回值 否则设置成NILrnrnimplementationrnrn//ParamList参数整理过程,这里是处理各种API参数的rn//根据TAPIParama.ParamType的值来处理参数rn//EBX 为参数的指针地址,即PAIPParamarn//ECX,EDX 在过程中被使用,使用前请保护ECX,EDX的值,如果ECX,EDX的值需要保护rnprocedure InitParam;<em>stdcall</em>;rnasmrn CMP EBX , $0; //参数是否=NILrn JZ @ExitThisProc;rnrn CMP DWORD PTR [EBX] , atPointer; //atPointer模式rn JZ @JPPointer;rn CMP DWORD PTR [EBX] , atInteger; //atInteger模式rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atReal; //Real模式rn JZ @RealMode;rn CMP DWORD PTR [EBX] , atByte; //Byte模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atShortInt; //ShortInt模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atSmallInt; //SmallInt模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atWord; //Word模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atLongWord; //LongWord模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atCardinal; //Cardinal模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atInt64; //Int64模式 处理过程和Real一样rn JZ @RealMode;rn CMP DWORD PTR [EBX] , atSingle; //Single模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atDouble; //Double模式 处理过程和Real一样rn JZ @RealMode;rn CMP DWORD PTR [EBX] , atComp; //Comp模式 处理过程和Real一样rn JZ @RealMode;rn CMP DWORD PTR [EBX] , atCurrency; //Currency模式 处理过程和Real一样rn JZ @RealMode;rn CMP DWORD PTR [EBX] , atExtended;rn JZ @ExtendedMode;rn CMP DWORD PTR [EBX] , atVarPointer; //VarPointer模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atBoolean; //Boolean模式 处理过程和Byte一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atLongBool; //LongBool模式 处理过程和Integer一样rn JZ @IntegerMode;rn CMP DWORD PTR [EBX] , atObject; //Object模式 处理过程和Integer一样rn JZ @IntegerMode;rnrnrn JMP @ExitThisProc;rnrn @IntegerMode: //整数模式rn MOV EBX , [EBX+$4]; //TAPIParama.Address的地址rn ADD EBX , -$4; //减4,因为在后面加了4rn JMP @JPPointer;rnrn @RealMode :rn ADD EBX , $4; //TAPIParama.Address的地址rn MOV EBX , [EBX] //得到实际的浮点数的地址rn POP ECX; //取出RET后的EIPrn PUSH DWORD PTR [EBX+4]; //API参数Real入伐rn PUSH DWORD PTR [EBX]; //API参数Real入伐rn PUSH ECX; //RET后的EIP入伐rn JMP @ExitThisProc;rnrn @ExtendedMode:rn ADD EBX , $4;rn MOV EBX , [EBX]rn POP ECX; //取出RET后的EIPrn MOV DX , [EBX+6];rn PUSH EDX; //API参数入伐rn PUSH DWORD PTR [EBX+4]; //API参数入伐rn PUSH DWORD PTR [EBX]; //API参数入伐rn PUSH ECX; //RET后的EIP入伐rn JMP @ExitThisProc;rnrnrn @JPPointer:rn ADD EBX , $4;rnrn @ParamStart:rn POP ECX; //取出RET后的EIPrn PUSH [EBX] //API需要的参数入伐rn PUSH ECX; //RET后的EIP入伐rn @ExitThisProc:rnend;rn
.model flat ,stdcallstdcall含义?
.model flat ,<em>stdcall</em>中<em>stdcall</em>含义?
stdcall介绍
<em>stdcall</em>的用法详解,常见的调用约定有:<em>stdcall</em>,cdecl,fastcall,thiscall,naked call
__stdcall的疑问
__<em>stdcall</em> 在什么情况下使用,有什么作用。
START与STDCALL?
.386rn.model flatrn.codernstart:rnmov eax,0a9d7c6e5hrnsal eax,4rnretrnend startrnrn程序如上rnrnml /c /coff ..\myprogram\test.asmrnlink /subsystem:console test.obj编译连接rnrn在LINK时报error LNK2001: unresolved external symbol _startrnrn怎么回事?rnrn后来在。MODEL FLAT后加了个,STDCALL就行了,又是怎么回事,分析下。。。。
请问__stdcall和_stdcall有什么区别没有?
请说明理由.
为什么dll导出函数一定要用__stdcall
不用,或者用__fastcall,则加载dll的应用程序找不到该<em>函数</em>rndll是由bcb生成,exe也是bcb写的rn请问这是<em>为什么</em>
__stdcall的问题
在WINBASE.H中,有如下定义rnWINBASEAPI BOOL WINAPI DeviceIoControl (HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);rn但我自己写了一段代码后,鼠标悬停在代码中的DeviceIoControl<em>函数</em>上,发现调用的是却是int __cdecl DeviceIoControlrn<em>为什么</em>不是__<em>stdcall</em>呢?如何才能是__<em>stdcall</em>呢?rn另,我是在eVC上做的,eVC中没有Calling convention _<em>stdcall</em>选项。rnWINDEF.H中相关的定义如下rnrn#ifdef _MACrn#define CALLBACK PASCALrn#define WINAPI CDECLrn#define WINAPIV CDECLrn#define APIENTRY WINAPIrn#define APIPRIVATE CDECLrn#ifdef _68K_rn#define PASCAL __pascalrn#elsern#define PASCALrn#endifrn#elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)rn#define CALLBACK __<em>stdcall</em>rn#define WINAPI __<em>stdcall</em>rn#define WINAPIV __cdeclrn#define APIENTRY WINAPIrn#define APIPRIVATE __<em>stdcall</em>rn#define PASCAL __<em>stdcall</em>rn#elsern#define CALLBACKrn#define WINAPIrn#define WINAPIVrn#define APIENTRY WINAPIrn#define APIPRIVATErn#define PASCAL pascalrn#endifrn
__cdecl 和 _stdcall
根据查阅资料所知rnrn__cdecl是C/C++默认的<em>函数</em>调用约定rnrn其他语言一般默认的调用约定为__<em>stdcall</em>rnrnwindwos api 的调用约定也是__cdeclrnrn因此在用C/C++写动态链接库时 如果编译的链接库供其他语言使用时 就要在导出<em>函数</em>时 显示指定__<em>stdcall</em>约定 rnrn不然就就会按默认的__cdecl编译 其他语言默认按__<em>stdcall</em>调用时会发生错误rnrn如果以上对的话 以下问题不解rnrn1、windows api 默认的约定是__<em>stdcall</em>rnrn<em>为什么</em>在C++/C中调用时 不出问题呢 C/C++默认是__cdecl啊 rnrn2、下段C++程序<em>为什么</em>能正确执行rnrn[code=C/C++]rnvoid __<em>stdcall</em> Hello__<em>stdcall</em>()rnrn cout<<
为什么类型名可以和成员名相同?
public enum Colorred,blue,orange,blackrn public class Arn rn public static void Main()rn rn Color Color=Color.red;rn System.Console.Write(Color);rn //int int=3;rn //System.Console.WriteLine(int);rn rn rnColor既是类型名又是它的一个变量名,和下面的int int是同一种情况,只不过int已经被定义为关键字了。
_stdcall的问题
看了MSDN说_<em>stdcall</em>好象和callback是一回事,又说和什么pascal,fortran又是一回事,到底_<em>stdcall</em>是代表什么意思啊!
stdcall的用途?
请祥细一点
__stdcall和__cdecl
最近学习回调<em>函数</em> rn在回调<em>函数</em>前都要加__<em>stdcall</em> 说是参数入栈方式不同,以及释放方式不同,找了半天也只找到一些汇编的文章,本人汇编不太好 也看不太明白是什么意思rn向各位过来的大侠请教下rn1.<em>为什么</em>回调一定要加__<em>stdcall</em>,回调不是动态绑定<em>函数</em>(通过<em>函数</em>指针绑定)但加__<em>stdcall</em>是<em>为什么</em>啊rn2.一般<em>函数</em><em>函数</em>是__cdecl,他和__<em>stdcall</em>到底有什么不同,哪位能不能给个简单的代码<em>函数</em>,调用后可以直观的看到结果的不同rn以上请各位指教,谢谢!
_cdecl与__cdecl,_stdcall与__stdcall有什么区别?
我写DLL都是用的_cdecl,好像没有问题啊~可以正常使用。
__stdcall是什么?
__<em>stdcall</em>是什么?
stdcall与 cdecl
<em>stdcall</em> cdecl <em>函数</em>调用方式详解
函数的返回值(微软).
<em>函数</em>的返回值(<em>微软</em>) intfunc(x) { intcountx=0; while(x) { countx++; x=x&(x-1); } returncountx; } 假定x=9999。答案:8
微软未公开函数集合
<em>微软</em>未公开<em>函数</em>的书籍总汇
微软为什么收购GitHub?
<em>微软</em>很早就明白,拥有大量的开发人员是多么强大的潜在资本。拥有了GitHub,该公司将增加一个拥有2700万开发人员的社区,这些开发人员把存储库作为他们软件工厂的关键组成部分——同样是代表<em>微软</em>云技术关键目标市场的开发人员。据彭博新闻(Bloomberg News)周日发布的一份报告显示,这家总部位于旧金山的公司已同意被<em>微软</em>(Microsoft)收购。此前,《商业内幕》(Business Inside...
为什么微软不是“FLAG”?
知乎上有一个非常火的问题:<em>为什么</em><em>微软</em>没能与FLAG并列?   常在科技求职圈混,应该没有人不知道FLAG (Facebook,LinkedIn,Amazon, Google)。     由于薪资高,职位多,名声大,这几大科技公司近年来备受应届生欢迎。   不过,对于FLAG这一说法,也许一些同学会感到疑惑:   像<em>微软</em>(Microsoft)这样的科技巨头,<em>为什么</em>没有与“F...
为什么微软网站打不开
![图片说明](https://img-ask.csdn.net/upload/201711/15/1510744508_583256.png)nn只打开了首页,在上面的链接,就打不开了。nn经常是一个空白页,n最下方红线那显示的差不多。
java格式化注释不乱标签
-
Scala-day01-06.函数-带名函数-默认值-过程
本部分内容全面涵盖了Spark生态系统的概述及其编程模型,深入内核的研究,Spark on Yarn,Spark Streaming流式计算原理与实践,Spark SQL,Spark的多语言编程以及SparkR的原理和运行。rnPython语言的部分大家在学习后可以完全掌握Python的精髓,并通过这部分的学习给大家打好一个基础。
关于名空间里的函数
在 vc7.1 下rnrn名空间 my 中有两个<em>函数</em> print 和 print2, rn在调用时, <em>为什么</em> print 不需要加my前缀而print2要加呢?rnrn根据我以前的理解, 调用空间my中的<em>函数</em>xxx时, 应该是这样的rnmy::xxx(....)rnrn但是下面的代码中<em>为什么</em>rnprint不加my前缀也没有报错呢, 而且运行正常rnrnrn代码如下:rnrn#include rnrnnamespace my rn class Bar rn public:rn Bar::Bar(int data): data_(data) rn int data_;rn ;rnrn void print(const Bar& bar) rn std::cout << bar.data_;rn rnrn void print2() rn std::cout << 2;rn rnrnrnrnint main() rnrn my::Bar bar(5);rnrn print(bar); // 这里不加my前缀也没有报错rn //print2(); rn //如果不注释上面一行则编译器报错rnrn return 0;rn
CreateEvent()函数中的event名
如果我创建2个event,定义不同的句柄,但是采用相同的event名,那么这两个event间有什么关系吗?rn采用event名有什么作用?rn如下:rnHANDLE hEvent = CreateEvent(NULL , FALSE , FALSE , "Notice_USB_Connect");rnHANDLE hTrackEvent = CreateEvent(NULL , FALSE , FALSE , "Notice_USB_Connect");rn
函数的实参标签 & 形参名
// 完整的<em>函数</em>定义 func funcName(实参标签 形参名: 类型) { // In the function body, 形参名 refers to (引用) 该参数的参数值 } 实参标签用在调用<em>函数</em>的时候(除非用_省略实参标签, 否则<em>函数</em>调用时, 实参的前面必须写实参标签), 定义<em>函数</em>时可以省略, 省略则意味者: 实参标签 == 形参名; 形参名用在<em>函数</em>的实现当中(即大括号中); ...
stdcall和__stdcall有什么区别?">请问:函数前面的"_"起什么作用?如:_stdcall和__stdcall有什么区别?
-
关于C函数(名)的本质
我像问一问c<em>函数</em>(或者<em>函数</em>名)的本质是什么?rn<em>函数</em>名是一个具体的存储着的变量么?rn若不是,为何有:rn假设f6是一个普通的<em>函数</em>rn而rnf6();rn(&f6)();rn(*f6)();rn(********f6)();rn都是正确的呢?
stdcall和__stdcall有什么区别?答者有分">请问:函数前面的"_"起什么作用?如:_stdcall和__stdcall有什么区别?答者有分
-
近来看书提到所有的winapi函数都是使用的标准的stdcall,那么,什么叫做'标准的stdcall'
近来看书提到所有的winapi<em>函数</em>都是使用的标准的<em>stdcall</em>,那么,什么叫做'标准的<em>stdcall</em>'
为什么微软要公开一个AdjustTokenPrivileges函数呢?
如题,权限能随意修改了,那这样权限还有用嘛?
Cannot convert 'int (__stdcall *)()' to 'int (__stdcall *)(AnsiString *)' 为什么会有这样的问题呢?
我在头文件中有以下声明:rnprivate:rn int _<em>stdcall</em> (*ShowDLLForm)(AnsiString *);rnrn然后在实现中调用rnbool TMainForm::LoadDLLFun(char *DLLName,char *FunName)rnrnrn HINSTANCE instDLL;rn tryrn if(instDLL!=NULL)rn rn FreeLibrary(instDLL);rn instDLL=NULL;rnrn instDLL=LoadLibrary(DLLName);rnrn if(instDLL!=NULL)rn rn ShowDLLForm=GetProcAddress(instDLL,FunName);rn if(ShowDLLForm==NULL)rn rnrn Application->MessageBoxA("动态链接库运行发生错误\n","错误",MB_OK);rn// ShowMessage("动态链接库运行发生错误\n");rn// FreeLibrary(instDLL);rn return false;rn rn rn rn elsern rn AnsiString AppPath=GetCurrentDir();rn instDLL=LoadLibrary(DLLName);rnrn if(instDLL!=NULL)rn rn ShowDLLForm=GetProcAddress(instDLL,FunName);rn if(ShowDLLForm==NULL)rn rn ShowMessage("动态链接库运行发生错误\n");rn// FreeLibrary(instDLL);rn return false;rn rn rn rn //tryrn catch(Exception &Err)rn rn ShowMessage("加载动态链接库发生错误!\n" + Err.Message);rn rn return true;rnrnrn但是编译的时候确给我这样的提示:rn[C++ Error] Main.cpp(31): E2034 Cannot convert 'int (__<em>stdcall</em> *)()' to 'int (__<em>stdcall</em> *)(AnsiString *)'rn[C++ Error] Main.cpp(49): E2034 Cannot convert 'int (__<em>stdcall</em> *)()' to 'int (__<em>stdcall</em> *)(AnsiString *)'rnrn<em>为什么</em>会这样呢,请高手指点!!
stdcall详解教程
<em>stdcall</em>详解教程
关于__stdcall和__cdecl
他们代表了什么呢?在VC里用goto definiton找不到他们的定义了。。。
关于__stdcall 和 __cdecl的问题
各位大侠:rn 我有个问题。就是我知道c语言调用<em>函数</em>是__cdecl的。有调用者清空栈,而其他语言是__<em>stdcall</em>的,<em>函数</em>返回时自己要清空栈。但我还是不太理解。我知道用__cdecl有一个好处是可以实现可变参数,如printf()<em>函数</em>。但我们是否可以自己编出来这样的<em>函数</em>呢?因为除了<em>函数</em>库中的<em>函数</em>,我还没见过自己编出来的,向各位请教了!!谢谢!!
问一下STDCALL的概念
具体一点,最好附上一个例子
stdcall"怎么回事?">syntax error "__stdcall"怎么回事?
在调用回调<em>函数</em>时出现如上错误,怎么办?
__stdcall的疑惑?高手请进
今天,用VS6.0和VS8.0同时测试一下__<em>stdcall</em>的调用规范,好像与MSDN中描述不一致啊!__<em>stdcall</em>的<em>函数</em>竟然可以带可变参数??以下是测试代码,编译通过,并正确执行。请高手指出原因!!!rn[code=C/C++]rn#include rnusing namespace std;rnclass CArnrnpublic:rn void __<em>stdcall</em> FX(int a, int b, ...) cout << "&a = " << &a << ", &b = " << &b << ", CA::FX();\n"; rn;rnclass CB : public CArnrnpublic:rn void __<em>stdcall</em> FX() cout << "CB::FX();" << endl; rn;rnrnint main(void)rnrn CA objA;rn objA.FX(10, 10, 10);rn CB objB;rn objB.FX(10, 10, 10);rnrn return 0;rnrn[/code]
__declspec(naked) _stdcall ???
在VC2008中,的声明一个<em>函数</em>原型以及定义,如下rnrnvoid __declspec(naked) _<em>stdcall</em> foo();rnrnvoid __declspec(naked) _<em>stdcall</em> foo()rnrn // 什么事都没有做rnrnrn出现了错误提示:rnerror C2488: “foo”: “naked”只能应用到非成员<em>函数</em>定义rnrn哪位能帮帮解释一下吗,非常感谢!!!
syntax error : '__stdcall'
#ifdef __cplusplusrn#define DLL_API extern "C" __declspec (dllexport)rn#elsern#define DLL_API __declspec (dllexport)rn#endifrnrntypedef NTSTATUS (NTAPI *NTALLOCATEVIRTUALMEMORY)(IN HANDLE ProcessHandle,rn IN OUT PVOID *BaseAddress,rn IN ULONG_PTR ZeroBits,rn IN OUT PSIZE_T RegionSize,rn IN ULONG AllocationType,rn IN ULONG Protectrn );rnrnrnDLL_API NTALLOCATEVIRTUALMEMORY NtAllocateVirtualMemoryOrig;rnrnrnrn上面是写在C++的DLL文件里面rnrnrn然后编译的时候出现如下错误:rnrnrnrnerror C2059: syntax error : '__<em>stdcall</em>'rnerror C2091: function returns functionrnerror C2146: syntax error : missing ';'rn before identifier 'NtAllocateVirtualMemoryOrig'rnfatal error C1004: unexpected end of file foundrnrnrnrn其它地方没错,就这里报错,好象是调用规则问题,但不知道要怎么写才不会出错,想请教一下论坛上谁写过这样的
请教_cdecl 和_stdcall
_cdecl 和_<em>stdcall</em>的区别和他们的作用???
关于_stdcall 与_cdecl的区别
小弟向各位求助:rn新标准C/C++<em>函数</em>调用方法_<em>stdcall</em> 与标准C调用方法_cdecl 的区别.rn如能举出一例本人不胜感激.
请教_stdcall _cdecl 的用法
_<em>stdcall</em> _cdecl 到底起什么作用呢rn如果不用会有什么后果??
——stdcall源自何处?
谁知道?
微软未公开函数大收集!
谢谢,谢谢!rnrn欢迎光临,rn多多益善!rn
MFC中stdcall调用约定
调用约定的讲解,对_<em>stdcall</em> 的理解(上) 在C语言中,假设我们有这样的一个<em>函数</em>:int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个<em>函数</em>。
__stdcall是什么意思???
请指教!!!rn谢谢!!!
__stdcall 和 __cdecl 是什么意思?
好像是vc中的编译选项,具体的用途不知道、
#define WINAPI __stdcall
这个 __<em>stdcall</em>是什么东东???能不能给我一个比较详细的答案?rnrn谢谢!
关于_stdcall的用途
什么时候成员<em>函数</em>需要加上_<em>stdcall</em>?<em>为什么</em>COM定义的结构就需要。rnrnrnrn"_<em>stdcall</em> 标记的<em>函数</em>将使用标准的调用约定,即这些<em>函数</em>将在返回到调用者之前将参数从栈中删除。"这就是COM定义的结构需要_<em>stdcall</em>理由吗?rnrn什么时候应该用它,什么时候又应该用_cdel
关于fastcall和stdcall
请教各位大神,什么时候用fastcall,什么时候用<em>stdcall</em>,我觉得fastcall完全可以代替<em>stdcall</em>啊,fastcall省内存而且速度还快,<em>为什么</em>还要用<em>stdcall</em>呢?求解!
vc2005不支持__stdcall吗?
vc++6 中可以编译通过的<em>函数</em>,在2005中却编译不过去,去掉__<em>stdcall</em>就好了.还有其他一些__cdecl __fastcall好像也不支持,请问该如何解决!
有与没有__stdcall的区别?
见有些<em>函数</em>用__<em>stdcall</em>修饰, 如: void __<em>stdcall</em> foo(int ,int);rn我们自己写的<em>函数</em>一般不写这个__<em>stdcall</em>修饰符.rnrn请问不写__<em>stdcall</em>修饰符的<em>函数</em>默认是哪种修饰?
问__stdcall和__cdecl
如果不实现变参<em>函数</em>,不考虑生成代码大小,这两种调用是不是没啥区别,用哪个都行??还是还有其他的用途??
关于__stdcall 与 __cdecl 的问题。
如果动态库中导出的<em>函数</em>声明是:rn extern "C" __declspec(dllexport) __<em>stdcall</em> int mydllfunc(int);rn我在使用动态库时导入:rn extern "C" __declspec(dllimport) int mydllfunc(int);rn和rn extern "C" __declspec(dllimport) int __<em>stdcall</em> mydllfunc(int);rnrn两种声明都是正确的吗?两种情况有什么区别?
stdcall的用法
如上
编译错误 (__stdcall *)谁遇到过?
rnEnumChildWindows( pWnd->m_hWnd, EnumChildProc,0);rnrn提示rncannot convert parameter 2 from 'int (struct HWND__ *,long)' to 'int (__<em>stdcall</em> *)(struct HWND__ *,long)'
__stdcall 和 __cdecl 的区别
能否说的详细点
求下面函数的返回值(微软
int func(x) rn rn    int countx = 0; rn    while(x) rn    rn          countx ++; rn          x = x&(x-1); 按位与,同时为1时保留rn     rn    return countx; rn  rnrn这道题的思路是什么呢?
error C2440: 'specialization' : cannot convert from 'int (__stdcall *)(void *)' to ' (__stdcall *)()'
template class THandle rn T m_h;rnpublic:rn THandle() rn m_h = T(-1); // Always illegalrn rn THandle(T h) m_h = h; rn ~THandle() rn if (IsValid()) Close(); // Ensure we do not double-closern rn THandle& operator=(T h) rn m_h = h;rn return *this;rn rn operator T() return m_h; rn T *operator &() return &m_h; rn CloseT Close() rn T h = m_h;rn m_h = T(-1);rn return (*CloseFunc)(h); // Return the result of whatever typern ;rn BOOL IsValid() return m_h != T(-1) && m_h != T(0); rn;rn//rn// Now define common handles as safe classes.rn//rntypedef class THandle CHandle;rntypedef class THandle CHKey;rntypedef class THandle CHFile;rntypedef class THandle CHFind;rntypedef class THandle CHChange;rntypedef class THandle CHModule;rntypedef class THandle CHWnd;rn//rnrn代码见上,VC6编译的时候报rnerror C2440: 'specialization' : cannot convert from 'int (__<em>stdcall</em> *)(void *)' to ' (__<em>stdcall</em> *)()'rnThis conversion requires a reinterpret_cast, a C-style cast or function-style castrnerror C2975: 'THandle' : invalid template argument for 'CloseFunc', constant expression expected see declaration of 'THandle'rn.......rnWHY?
stdcall 与_stdcall(一个下滑线)、 __stdcall有什么不同?这里有什么命名规则及含义么?
-
请问 XXX _stdcall YYY()中的stdcall意思是什么?
请问 XXX _<em>stdcall</em> YYY()中的<em>stdcall</em>意思是什么?谢谢
c++的函数调用约定 __stdcall __cdecl
关于这两种调用约定 我大概也有点了解了 两者的区别大家不用多说 rnrn但我不太明白 这两种调用约定 在实际的编程当中 能带来什么好处呢 比如说__cdcel是支持可变长参数的<em>函数</em>调用 那么除了这个呢 其他方面 二者能带来什么好处 什么场合应该用 或者必须用__<em>stdcall</em> 什么场合必须用__cdecl???我知道windows api的调用约定都是__<em>stdcall</em>的。。。。rnrn在清理堆栈方面 二者能为实际的编程带来什么影响????rn
VB人事管理系统实例下载
这是学习数据库时找到的一个系统,发出来供大家参考学习 相关下载链接:[url=//download.csdn.net/download/Alexsen/309569?utm_source=bbsseo]//download.csdn.net/download/Alexsen/309569?utm_source=bbsseo[/url]
cad命令全集(真正的全集)下载
cad命令全集(真正的全集),绝对不容错过,很好的东西 相关下载链接:[url=//download.csdn.net/download/xhety/2195899?utm_source=bbsseo]//download.csdn.net/download/xhety/2195899?utm_source=bbsseo[/url]
八皇后问题-回溯法下载
可自定义皇后数量,采用回溯法求解,已经vs编译通过,可运行 相关下载链接:[url=//download.csdn.net/download/taoist0118/3687679?utm_source=bbsseo]//download.csdn.net/download/taoist0118/3687679?utm_source=bbsseo[/url]
我们是很有底线的