这是否仍然为一种指针函数声明别名?
Does this still declare an alias for a type of pointer function?
我正在使用一些标准库为某些设备开发通用接口。
在代码的某些部分我有
//header.h
#ifndef _M_X64
# define GC_CALLTYPE __stdcall
#else
# define GC_CALLTYPE /* default */ //this is my case
#endif
...
typedef int32_t GC_ERROR;
...
/* typedefs for dynamic loading */
#define GC_API_P(function) typedef GC_ERROR( GC_CALLTYPE *function )
GC_API_P(PTLOpen)( TL_HANDLE *phTL );
在我的源文件中我有
//source1.cpp
TLOpen(&hTl)
//source2.cpp
#define FUNCTION_POINTER(function, ptype, hModule) \
((function) = reinterpret_cast<ptype>(GetProcAddress((hModule), #function))) // What is this #?
GC::PTLOpen TLOpen = 0;
FUNCTION_POINTER(TLOpen, GC::PTLOpen, hModule);
我想知道:
TLopen()
声明是什么?我替换了宏并得到了这个:
typedef int32_t( GC_CALLTYPE *PTLOpen )( TL_HANDLE *phTL );
但我对函数指针的学习有所不同,我希望得到这样的结果:
typedef int32_t( *PTLOpen )( TL_HANDLE *phTL );
上面的声明还是函数指针吗? GC_CALLTYPE
呢?
定义FUNCTION_POINTER
宏时function
前的#
符号是什么?
TLopen()
函数的body在哪里?我有一些 .lib
和 .dll
文件要包含在内。 body 是否可以编译形式存在于这些文件中?
GC_CALLTYPE
在 calling convention specifier can be (like __stdcall
). Can be because don't forget that very easily GC_CALLTYPE
can also expand to an empty string. A quick search gave a question where this syntax is discussed here in SO: How to declare an __stdcall function pointer
的地方
这称为字符串化:例如,如果相应的宏参数为 xyz
,则 #function
将扩展为 "xyz"
。更多 here.
是的,实际上可以。您的 API 会告诉您如何进行编译,以便程序可以找到该函数。这就是拥有图书馆和 linker.
的全部目的
我正在使用一些标准库为某些设备开发通用接口。 在代码的某些部分我有
//header.h
#ifndef _M_X64
# define GC_CALLTYPE __stdcall
#else
# define GC_CALLTYPE /* default */ //this is my case
#endif
...
typedef int32_t GC_ERROR;
...
/* typedefs for dynamic loading */
#define GC_API_P(function) typedef GC_ERROR( GC_CALLTYPE *function )
GC_API_P(PTLOpen)( TL_HANDLE *phTL );
在我的源文件中我有
//source1.cpp
TLOpen(&hTl)
//source2.cpp
#define FUNCTION_POINTER(function, ptype, hModule) \
((function) = reinterpret_cast<ptype>(GetProcAddress((hModule), #function))) // What is this #?
GC::PTLOpen TLOpen = 0;
FUNCTION_POINTER(TLOpen, GC::PTLOpen, hModule);
我想知道:
TLopen()
声明是什么?我替换了宏并得到了这个:
typedef int32_t( GC_CALLTYPE *PTLOpen )( TL_HANDLE *phTL );
但我对函数指针的学习有所不同,我希望得到这样的结果:
typedef int32_t( *PTLOpen )( TL_HANDLE *phTL );
上面的声明还是函数指针吗? GC_CALLTYPE
呢?
定义
FUNCTION_POINTER
宏时function
前的#
符号是什么?TLopen()
函数的body在哪里?我有一些.lib
和.dll
文件要包含在内。 body 是否可以编译形式存在于这些文件中?
GC_CALLTYPE
在 calling convention specifier can be (like__stdcall
). Can be because don't forget that very easilyGC_CALLTYPE
can also expand to an empty string. A quick search gave a question where this syntax is discussed here in SO: How to declare an __stdcall function pointer 的地方
这称为字符串化:例如,如果相应的宏参数为
xyz
,则#function
将扩展为"xyz"
。更多 here.是的,实际上可以。您的 API 会告诉您如何进行编译,以便程序可以找到该函数。这就是拥有图书馆和 linker.
的全部目的