创建DLL后的函数指针分配导致错误

问题描述 投票:0回答:1

我为我的应用程序编写了一个类。在此类中,有静态函数指针,用于通过网络套接字进行通信。在启动时,我将此函数指针分配给类之外的函数,并且可以正常工作而没有任何问题。现在我从类中创建了DLL,但是当我将此指针分配给函数时,出现“无法解析的外部符号”错误。我如何将类内的静态函数指针分配给类外的函数而没有任何问题?

这是我的课程:

(header,“ MyClass.h”)

#define IMPORT_DLL

#ifdef IMPORT_DLL
    #define DLL_IMPORT_EXPORT __declspec(dllimport) 
#else
    #define DLL_IMPORT_EXPORT __declspec(dllexport) 
#endif

namespace nmspace
{
    class MyClass
    {
        //Constructors
        DLL_IMPORT_EXPORT MyClass();
        DLL_IMPORT_EXPORT MyClass(size_t ID);

        //Destructor
        DLL_IMPORT_EXPORT ~MyClass();

        ....

        //This static function pointer should be assigned to a function outside of class
        //this pointer used frequently
        static bool(*Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port);
    }
}

((源,“ MyClass.cpp”)]

#include "MyClass.h"

bool(*MyClass::Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port) = nullptr;

//Constructor
void MyClass::MyClass()
{
    size_t Sock_num = 0
    uint8_t TX_buffer[20] = "Transmit done";
    bool is_connected = false;
    is_connected = Class_Transmit(TX_buffer, 20, Sock_num);
}

(main,“ main.cpp”)

#include "MyClass.h"

bool MyFunc(uint8_t* TX_buffer, size_t TX_size, size_t Port)
{
    ....
    return true;
}

int main()
{
    HINSTANCE hinstLib;
    hinstLib = LoadLibrary(TEXT("myclass.dll"));

    // If the handle is valid, try to get the function address.
    if (hinstLib != NULL)
        return false;


    //Assign network socket function for "Class_Transmit" class for communication
    MyClass::Class_Transmit = MyFunc;
    return 0;
}
c++ class function-pointers
1个回答
0
投票

错误表明该函数必须位于nmspace命名空间中。尝试以下操作:

namespace nmspace
{
    bool MyFunc(uint8_t* TX_buffer, size_t TX_size, size_t Port)
    {
        return true;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.