这是否仍然声明一种指针函数的别名?
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
之前#
符号是什么FUNCTION_POINTER
?TLopen()
功能的主体在哪里?我有一些.lib
和.dll
文件要包含。正文可以以编译形式存在于这些文件中吗?
-
GC_CALLTYPE
位于调用约定说明符可以位于的位置(如__stdcall
)。可能是因为不要忘记,很容易GC_CALLTYPE
也可以扩展到空字符串。快速搜索给出了一个问题,其中讨论了 SO:如何声明__stdcall函数指针 -
这称为字符串化:例如,如果
xyz
了相应的宏参数,#function
将扩展到"xyz"
。更多 这里. -
是的,实际上可以。您的API将告诉您如何进行编译,以便程序可以找到该函数。这就是拥有库和链接器的全部目的。
相关文章:
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- 在硬件SIMD矢量指针和相应类型之间进行"interpret_cast"是一种未定义的行为吗
- 在类方法中使用 "this" 指针是否是一种好的做法?
- free():仅在一种情况下指针无效
- 如何测试指针类型是否可以安全地转换为另一种指针类型?
- 重新初始化指针是一种不好的做法吗?
- 是否有一种方法可以访问/解除并找到存储在双指针向量中的元素的值
- 将指向结构的指针转换为具有较少字段数的另一种结构类型
- 有没有一种 stl 方法来执行指针向量的深度复制
- 在比较中使用已强制转换为另一种类型的函数指针是否定义良好?
- 返回一个原始指针而不是unique_ptr是一种良好的编码实践吗
- 这是否仍然声明一种指针函数的别名?
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 将"this"指针强制转换为另一种类型不违反严格锯齿?
- 想要一种在C++中交换两个指针的有效方法
- 有没有一种方法可以获取在处理信号期间访问的指针