num*_*l25 6 c c++ visual-studio-2008 visual-studio visual-c++
我只是想进一步了解extern C函数.
根据我的知识,extern C函数始终是您正在尝试从已编译的应用程序调用的函数.可执行文件,静态库或动态库.
extern "C"
{
HRESULT CreateDevice();
typedef HRESULT (*CREATEDEVICE)();
HRESULT ReleaseDevice();
typedef HRESULT (*RELEASEDEVICE)();
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是......
我的理解是否正确?
它总是必须是一个C函数指针??'
为什么必须为每个函数使用typedef?
我假设你使用GetProcAddress().您正在为特定应用程序HEAP分配内存,而不是您从中调用它的内存.因此你必须从那个堆中释放它?
它不一定是函数指针。您可以正常指定函数声明并在其前面加上 前缀extern "C",如下所示,如某些 Microsoft 示例。
如果你使用GetProcAddress()则不会分配任何内存。您只需获取已加载到内存中的 DLL 内函数的内存地址(大概是LoadLibrary())。
即使使用函数指针(例如 GetProcAddress 返回的函数指针),您也不必使用,typedef只是如果没有它,代码看起来相当难看。也总是很难弄清楚要写什么。我认为它会是这样的:
void (*pReleaseDevice)() = (void (__cdecl *)(void))GetProcAddress(hInstance, "ReleaseDevice");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |