jjzjj

c++ - "cdecl"代表什么?

是的,我知道“cdecl”是一个重要的调用约定的名称,所以请不要向我解释调用约定。我要问的是缩写(?)“cdecl”实际上代表什么。我认为这是一个糟糕的命名选择,因为乍一看它让人想起“C​​声明符”(C的一个相当独特的句法方面)。其实有一个程序叫cdecl其唯一目的是破译C声明符。但据我所知,C声明符语法与调用约定完全无关。简化版:“stdcall”代表“标准调用约定”。“cdecl”代表什么? 最佳答案 它来自已声明的C函数(与在K&RC中常见的未声明的C函数相反)。当时它与pascal调用约定(被调用者清除堆栈)共存,因此在编程

c++ - 错误 LNK2019 : unresolved external symbol ___iob_func referenced in function "void __cdecl Padding(int)"

使用FTDIAPI可以在VisualStudio2012下正常编译和链接。但在VS2014下,它给出:ErrorLNK2019:unresolvedexternalsymbol___iob_funcreferencedinfunction"void__cdeclPadding(int)"标准库有变化吗? 最佳答案 是的,标准库已经改变,FTDI似乎并不关心-至少从CDM2.12.18驱动程序版本开始不关心。问题在thisquestion的答案中描述。.ftd2xx.lib中devcon.obj的void__cdeclPadding(

c# - PInvoking C++ DLL 时出现 AccessViolationException(cdecl 调用约定问题?)

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion我花了一整天的时间研究这个,但我一点也不聪明:我有一个C#DLL,它PInvokesC++DLL中的一个方法。在Debug模式下编译时我没有遇到任何问题,但在Release模式下编译时我得到一个AccessViolationException。谷歌搜索这个问题告诉我这可能是不符合调用约定的问题。在C

c++ - 如何为特定头文件中声明的函数强制执行 cdecl 调用约定

嗨我的VC2008项目使用stdcall调用约定。我有一个我正在使用的外部库,它是用cdecl命名约定构建的,但是他们没有在函数的函数声明中提到调用约定。我想知道VC是否有某种#pragma或其他关键字可以强制整个头文件的特定调用约定有点像extern"C"技巧,但用于调用约定:extern"C"{#include#include}有人知道吗? 最佳答案 您可以通过以下方式指定调用约定:什么都不做,您将获得默认的cdecl。明确指定__cdecl(或可能通过宏)。通过使用/Gd进行编译,选择在整个翻译单元中使用cdecl。没有pra

C# GetFunctionPointerForDelegate cdecl 而不是 stdcall

我正在尝试使用具有回调机制的(C)第三方库,该机制缺少任何可能的识别调用上下文的方法。我的主要项目在C#中,我的包装器是一个调用C库API的C++/CLI项目。为了解决这个问题,我尝试使用Marshal::GetFUnctionPointerForDelegate。这是我的C#代码:voidInit(HandlerCallback){//CreateawrapperlambdaincaseCallbackisanon-staticmethod.instance.CreateBuffers((x,y)=>Callback(x,y));}然后,在C++/CLI代码中:voidCreateB

c++ - __cdecl 和 __declspec 调用约定混淆

我正在为第三方应用程序编写DLL。主要软件工程师提到该应用程序使用__cdecl(/Gd)调用约定。我需要确保使用它。另外,第三方提供给我一个C++DLL骨架,导出函数如下:#ifdef_EXPORTING#defineDECLSPEC__declspec(dllexport)#else#defineDECLSPEC__declspec(dllimport)#endif#ifdef__cplusplusextern"C"{#endifDECLSPECintICD_Create(char*id);........我有点迷茫。为什么使用__declspec约定而不是__cdedl导出函数?

c++ - winapi 函数的函数指针 (stdcall/cdecl)

有人可以给我一些为MSwinapi函数创建函数指针的技巧吗?我正在尝试为DefWindowProc(DefWindowProcA/DefWindowProcW)创建指针,但出现此错误:LRESULT(*dwp)(HWND,UINT,WPARAM,LPARAM)=&DefWindowProc;errorC2440:'initializing':cannotconvertfrom'LRESULT(__stdcall*)(HWND,UINT,WPARAM,LPARAM)'to'LRESULT(__cdecl*)(HWND,UINT,WPARAM,LPARAM)'我不知道我需要使用什么,因为我

assembly - 调用可以是 cdecl 或 stdcall 的函数

我需要编写调用外部函数的代码,该函数可以是32位Windows应用程序中的stdcall调用或cdecl。我的代码,调用者,无法提前知道它会是哪一个。现在,如果我尝试从定义为stdcall的调用站点调用cdecl函数,我会看到一个checkEsp异常对话框,我猜这是有充分理由的。有什么办法吗? 最佳答案 可以通过以下方式完成:movesi,esppusharg3pusharg2pusharg1call[SomeExternalProc]movesp,esi;nowthestackisalwaysproperlycleaned外部过程

c# - 将 C# 委托(delegate)的调用约定更改为 CDECL

我在使用DotNet1.1时遇到过这个C#问题问题是这样的。我有一个非托管dll,它有一个带有函数指针(以及其他参数)的函数。当我在C#代码中声明DLLImport时,我传递了一个委托(delegate)。但是C#中的委托(delegate)具有stdcall调用约定,而非托管函数需要cdecl函数指针。因此,我天真的方法导致了崩溃。然后我发现了以下内容:http://www.codeproject.com/KB/cs/cdeclcallback.aspx有人编写了一个出色的库,据我所知,它可以通过MSIL-hacking更改委托(delegate)的调用约定。事情进展顺利,直到...

c++ - 错误 LNK2019 未解析的外部符号 _main 在函数 "int __cdecl invoke_main(void)"(?invoke_main@@YAHXZ) 中引用

错误:SeverityCodeDescriptionProjectFileLineErrorLNK2019unresolvedexternalsymbol_mainreferencedinfunction"int__cdeclinvoke_main(void)"(?invoke_main@@YAHXZ)SeverityCodeDescriptionProjectFileLineErrorLNK11201unresolvedexternals代码:#include"windows.h"#include"tchar.h"#include"d3d9.h"#pragmacomment(lib,