dll – GetProcAddress无法找到我的函数
发布时间:2020-12-13 22:36:27 所属栏目:Windows 来源:网络整理
导读:我用一个名为“render()”的函数创建了一个DLL,我想将它动态加载到我的应用程序中,但是GetProcAddress无法找到它.这是DLL .h: #ifdef D3D_API_EXPORTS#define D3D_API_API __declspec(dllexport)#else#define D3D_API_API __declspec(dllimport)#endifD3D_A
我用一个名为“render()”的函数创建了一个DLL,我想将它动态加载到我的应用程序中,但是GetProcAddress无法找到它.这是DLL .h:
#ifdef D3D_API_EXPORTS #define D3D_API_API __declspec(dllexport) #else #define D3D_API_API __declspec(dllimport) #endif D3D_API_API void render(); 这是DLL .cpp: #include "stdafx.h" #include "D3D_API.h" #include <iostream> D3D_API_API void render() { std::cout << "method called." << std::endl; } 这是尝试使用该功能的应用程序: #include "stdafx.h" #include <windows.h> #include <iostream> int _tmain(int argc,_TCHAR* argv[]) { HINSTANCE myDLL = LoadLibrary( L"D3D_API.dll" ); if (myDLL == NULL) { std::cerr << "Loading of D3D_API.dll failed!" << std::endl; } typedef void (WINAPI *render_t)(); render_t render = (render_t)GetProcAddress( myDLL,"render" ); if (render == NULL) { std::cerr << "render() not found in .dll!" << std::endl; } return 0; } 我的目标是使用统一的API通过自己的.DLL制作支持D3D和OpenGL的3D引擎.我在记事本中查看了.dll,并且有一个字符串“render”. 解决方法
导出的函数被视为C函数(因为* .cpp文件扩展名),因此C
name mangling用于装饰导出的函数名称.如果您使用Microsoft的
Dependency Walker工具检查您创建的DLL,您将看到函数全名.
您可以在导入代码中使用该装饰名称,也可以强制编译器以C样式导出函数,即以当前导入代码所需的未修饰形式导出. 您可以通过在函数签名中添加extern“C”来告诉编译器.像这样的东西: extern "C" D3D_API_API void render(); 现在您的导入代码应该像被驱逐的那样工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows Phone 7 – 检测Windows Phone 7 ViewModel中的应用
- iis – Windows 7相当于“Add-WindowsFeature”
- windows – 将注册表值添加到域上的所有用户
- 02、Windows Server 2003域账户管理(02)
- 部署 – 将REINSTALLMODE传递给MSI文件
- sbt 安装
- group-policy – 2012R2 RDSH中的最佳实践部署打印机?
- .net-4.0 – 适用于Windows窗体的Microsoft .NET Framework
- win7“您可能没有权限使用网络资源”的解决办法
- windows – 使用powershell删除文件夹上的所有ACL