DLLを扱うのはこれが初めてです。MSDNのドキュメントに従って、プリプロセッサの定義に従ってマクロが定義されたヘッダーファイルfooExports.hを作成しました。
#ifdef FOODLL_EXPORTS
#define FOO_API __declspec( dllexport )
#else
#define FOO_API __declspec( dllimport )
私の意図は、DLL実装とコンソールアプリケーションの両方でこのヘッダーを使用することでした。これまでのところ、関数のインポートとエクスポートは問題なく機能します。エクスポートされた関数の1つのパラメーターとして必要な、定義済みの構造体をエクスポートしようとすると、問題が発生します。たとえば、前述のヘッダーファイルで宣言しFOO_API void foo( FooParams *args )
、args
次のように定義された構造体です。
typedef struct FooParams
{
char *a;
char *b;
void *whatever; //some other type
} FooParams;
この構造体は、fooExports.hではなくfoo.hで定義する必要があります。この構造体を元のヘッダーファイルから取り出さずにエクスポートする方法はありますか(エクスポート/インポートをfooExports.hに集中させたいことを考慮に入れて)。これを行うためのより良いアプローチは何でしょうか?DLLは、すべてCであり、それを使用するクライアントアプリケーションでもあります。