爱新觉罗二狗 2025-07-04 15:31 采纳率: 40%
浏览 11

C++ 动态链接库成员变量赋值问题

库代码如下:


#ifdef BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)//导出
#else
#define DLLIMPORT __declspec(dllimport)//导入
#endif

class DLLIMPORT Interface
{
public:
Interface()
{
  i=5
}
int i;
}

DLLIMPORT Interface* MakeClassPtr()
{
return new Interface();
}

测试代码如下:

int main()
{
Interface *test = MakeClassPtr();
  std::cout << "Value: " <<test ->i;
}

上面这样输出代码为0;
想问为什么,不应该是5吗

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-07-04 15:31
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    C++ 动态链接库成员变量赋值问题

    你遇到的问题是关于动态链接库中的成员变量赋值的问题。从你的代码中可以看到,你使用了 __declspec(dllexport)__declspec(dllimport) 来实现动态链接库的导出和导入。

    问题可能是关于如何在动态链接库中赋值成员变量的问题。下面是一些可能的解决方案:

    1. 使用 extern 关键字:在动态链接库中定义成员变量时,可以使用 extern 关键字来声明该变量。例如:
    class MyClass {
    public:
        int memberVar;
    };
    
    extern "C" DLLIMPORT MyClass* CreateMyClass();
    
    1. 使用 static 关键字:如果你想要在动态链接库中定义静态成员变量,可以使用 static 关键字。例如:
    class MyClass {
    public:
        static int memberVar;
    };
    
    extern "C" DLLIMPORT MyClass* CreateMyClass();
    
    1. 使用 __declspec(dllexport)__declspec(dllimport):在动态链接库中定义成员变量时,可以使用 __declspec(dllexport)__declspec(dllimport) 来实现成员变量的导出和导入。例如:
    class MyClass {
    public:
        __declspec(dllexport) int memberVar;
    };
    
    extern "C" DLLIMPORT MyClass* CreateMyClass();
    
    1. 使用 Get/Set 函数:如果你想要在动态链接库中提供成员变量的获取和设置函数,可以使用 GetSet 函数。例如:
    class MyClass {
    public:
        int memberVar;
        int GetMemberVar() { return memberVar; }
        void SetMemberVar(int value) { memberVar = value; }
    };
    
    extern "C" DLLIMPORT MyClass* CreateMyClass();
    

    这些解决方案可以帮助你解决动态链接库中的成员变量赋值问题。如果你需要更多帮助,请提供更多的代码和详细信息。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月4日