使用导出的成员函数返回指向MSG的指针 - DLL

时间:2015-11-15 12:26:22

标签: c++ winapi dll

这是一个复制示例

// in a header from a dll

class Window{
public:
MSG _declspec(dllexport) *getMessage(); //compiles
MSG* _declspec(dllexport) getMessage(); //fails
}

定义在.cpp文件中设置。

在应用程序中,我无法访问成员函数,为什么?我当然从Window的一个实例访问函数,如:

Window App;
func_with_parameters(param,App.getMessage(),0,0); // not found !

1 个答案:

答案 0 :(得分:1)

好的,首先关闭。

    __declspec(dllexport) MSG* GetMessage();

功能定义应该是正确的方式。

其次,__declspec(dllexport)需要在使用dll的项目的头文件中为__declspec(dllimport),否则将无法导入。这通常通过诸如此类的宏来处理。

    #ifdef _WINDLL // Defined by Visual Studio when building a Dll
    #define DLL_API __declspec(dllexport)
    #else 
    #define DLL_API __declspec(dllimport)
    #endif

第三,在类级别而不是函数级别导出可能更好,例如

    class __declspec(dllexport) Window

或使用宏

    class DLL_API Window