C と互換性のある関数の簡単な例を示すドキュメントをいくつか読みました。
__declspec(dllexport) MyFunction();
私はそれで大丈夫です。この dll の機能を使用する小さなアプリケーションを作成します。明示的なリンクを使用しました
LoadLibrary()
関数。C スタイルの関数は問題なく動作します。しかし、クラスを次のように書くと
namespace DllTest
{
class Test
{
public:
__declspec(dllexport) Test();
__declspec(dllexport) void Function( int );
__declspec(dllexport) int getBar(void);
private:
int bar;
};
}
#endif
それはうまくコンパイルされ、DLLが作成されます。C スタイルの関数を使用している間、私は単に LoadLibrary() および GetProcAddress(...) 関数から関数ポインタを取得していました。
私の以前の使い方は
typedef void (*Function)(int);
int main()
{
Function _Function;
HINSTANCE hInstLibrary = LoadLibrary(TEXT("test.dll"));
if (hInstLibrary)
{
_Function = (Function)GetProcAddress(hInstLibrary,"Function");
if (_Function)
{
// use the function
しかし、クラスをインスタンス化する方法がわかりません。明示的リンケージまたは暗黙的リンケージを使用するにはどうすればよいですか?
コードサンプルの助けをいただければ幸いです。