-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();
};

SomeCode.cpp

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

MyApplication.cpp などのライブラリ外のコードで、エクスポートされたシンボルを使用できます。

MyApplication.cpp

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

これと、これらの変数/関数をグローバルとして直接宣言することの唯一の違いは、2 つのライブラリが同じシンボル セットをエクスポートする場合、競合が発生することです。

PS: 定数を使用している場合は、代わりに Enum を使用することをお勧めします。

編集: Idohadar の要求に従って、より単純で詳細な例を追加しました。

于 2012-07-19T21:24:55.893 に答える
0

シンボルがエクスポートされ、その名前がわかっている場合は、宣言されている場所にヘッダーを含めてライブラリにリンクするか、自分で宣言することができます。

extern int whatever;

それは1つのオプションです。2つ目は、ゲッター関数を用意し、ゲッターをエクスポートしてから動的に呼び出して値を返すことです-研究LoadLibraryGetProcAddress.

于 2012-07-19T21:05:41.003 に答える