-1

我正在尝试获取一个值,该值每秒更改一次..并每次将其发送到应用程序..我创建了一个函数并与他一起返回了数字 60。当我使用应用程序调用该函数时,我看到了我返回的值。但是如果我想从 dll 中获取价值,那是一直在变化的。并在应用程序中显示?例如,我有弹球游戏中的 codecave 源,它可以让我在控制台中获得分数。从 dll 控制它,我想获取分值并将其显示在我自己的应用程序中。如何从 dll 获取分数到应用程序?并实时获取?只是为了在 dll 的控制台和我自己的应用程序中查看分数..

4

2 回答 2

1

如果您正在编写一个库并希望将一些符号从这里导出到该库之外的另一段代码,最好的方法始终是使用命名空间。

MyExportedHeader.h 和 SomeCode.cpp 应该被编译为你的库的一部分。

MyExportedHeader.h

namespace MyNamespace
{
    extern int foo;
    extern float bar;
    extern int get_num();
};

一些代码.cpp

namespace MyNamespace
{
    int foo = 15;
    floar bar = 25;
    int get_num()
    {
        /* CALCULATE and return the current num */
    }
};

您可以在 MyApplication.cpp 中的库外的一段代码中使用导出的符号

我的应用程序.cpp

#include <MyExportedHeader.h>
void somefn()
{
    int current_num = MyNamespace::get_num();
}

这与直接将这些变量/函数声明为全局变量之间的唯一区别是如果两个库导出相同的符号集 - 会有冲突。

PS:如果您使用的是常量,最好使用 Enums 代替。

编辑:根据 Idohadar 的要求添加了一个更简单和详细的示例。

于 2012-07-19T21:24:55.893 回答
0

如果符号被导出,并且您知道它的名称,您可以包含声明它的标头并链接到库,或者自己声明它:

extern int whatever;

这是一种选择。第二个是为它设置一个 getter 函数,导出 getter,然后动态调用它以返回您的值 - 研究LoadLibraryGetProcAddress.

于 2012-07-19T21:05:41.003 回答