値を取得しようとしています。値は毎秒変化し、毎回アプリケーションに送信します..関数を作成し、彼と一緒に60という数字を返しました。アプリケーションで関数を呼び出すと、私が返した値。しかし、DLLから値を取得したい場合はどうすればよいでしょうか。それは常に変化します。アプリケーションで表示しますか?たとえば、ピンボール ゲームの codecave のソースがあり、コンソールにスコアが表示されます。コンソールはdllから取得し、スコア値を取得して自分のアプリケーションに表示したい。dll からアプリケーションへのスコアを取得するにはどうすればよいですか? リアルタイムで取得しますか?dllのコンソールと自分のアプリケーションでスコアを確認するだけです..
2 に答える
ライブラリを作成していて、ここからこのライブラリ外の別のコードにエクスポートするシンボルが必要な場合は、常に名前空間を使用するのが最善の方法です。
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 の要求に従って、より単純で詳細な例を追加しました。
シンボルがエクスポートされ、その名前がわかっている場合は、宣言されている場所にヘッダーを含めてライブラリにリンクするか、自分で宣言することができます。
extern int whatever;
それは1つのオプションです。2つ目は、ゲッター関数を用意し、ゲッターをエクスポートしてから動的に呼び出して値を返すことです-研究LoadLibrary
とGetProcAddress
.