exeとdllが一つづつ存在する。

exeには二つの関数a()とb()が定義されている。
dllには二つの関数A()とB()が定義されている。

exeはLoadLibrary、GetProcAddressを使って
A()を実行し引数として関数ポインタaを渡す。

A()は与えられたポインタaからa()を実行し
引数として関数ポインタBを渡す。

a()はポインタBからB()を実行し
引数として関数ポインタbを渡す。

B()は与えられたポインタbからb()を実行する。

typedef void(*FUNC_b)( void );
typedef void(__stdcall *FUNC_B)( void(*FUNC_b)(void) );
typedef void(*FUNC_a)( void(__stdcall *FUNC_B)( void(*FUNC_b)(void) ) );
typedef void(__stdcall *FUNC_A)( void(*FUNC_a)( void(__stdcall *FUNC_B)( void(*FUNC_b)(void) ) ) );

とやったのですが、
exeがLoadLibrary、GetProcAddressを使ってA()を実行するところで
ハンドルされていない例外が発生します。

どこを直せばいいのでしょうか。