c++ - 导出类成员

标签 c++ class dll export

具体使用 DLL 或代码注入(inject)时
这是一个示例类,仅用于解释

class test
{
    int newint1;
    char newchararray[512];
    void (*newfunction1)( int newarg1 );
    int newfunction2( bool newarg1, char newarg2 )
    {
        return newint1;
    }
} mynewclass1;

涵盖了类中包含的最常见元素
现在将此函数导出到另一个 DLL 或应用程序时
并错过了其中的一个元素,数据成员或函数成员,私有(private)或公共(public)
发生了什么或改变了他们的订单?
如果像

这样的代码注入(inject)时,如果每个函数都被分配了它的值
 mynewclass1.newfunction1 = (void *)(newexportedfunction);

在这种情况下会发生什么情况,如果类的成员是在类构造之后分配的指针,然后错过了一个成员或更改了它们的顺序?

最佳答案

我想你忘了添加一个公共(public):(:)

mynewclass1 在加载时静态初始化为零(除非您使用的是非常旧的 Windows 版本)。 如果向类中添加构造函数,行为将变得不可预测,因为很难知道静态何时有效初始化(至少是链接时依赖性)。

关于c++ - 导出类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045947/

相关文章:

c++ - 在 Mac 上的 Xcode 中使用 C++ 中的堆栈、队列和链表的最简单方法是什么?

c++ - 用于查找 STL 容器中间的 STL 样式函数

除非使用迭代器,否则 c++ 映射在 dll 中不可读

c# - 如何使用 IDispatch 从非托管 C++ 调用 C# dll?

带 DLL 的 Spring-boot 可执行 tomcat

C++ 程序以代码 0 错误退出

android - java.lang.RuntimeException : Unable to instantiate activity ComponentInfo//java. lang.ClassNotFoundException 异常

objective-c - 从 Objective-C 使用 Swift 类和枚举

ios - 当具有不同值的同一类对象作为数据源传递时,为什么不重新呈现 View

c++ - 程序使用的DLL,其中声明的变量存储在哪里?