まずは、出来たdllをダンプしてみな。関数型にはWINAPIが必要だよ。
こういう場合は関数ポインタ型をtypedefしたら楽だよ。
typedef int (WINAPI *MYFUNC)(int, int);
dumpbinというダンプツールがあるから、それを使ってdllの情報をダンプする。
どうやってdllを作った? 初心者だから作り方間違ってる可能性がある。
あっ、それからC++からC言語の関数を定義・参照するにはextern "C"を付けないといけない。
C++関数のシンボル名は「mangling」によって変な名前になり、コンパイラーによって違うから(標準化されていない)、DLLでは使いづらいので、C言語関数にすることが多い。
DLL内部の輸出関数にextern "C"を付けてC言語関数にする。
関数ポインター型をtypedefする。
DLLをダンプして関数シンボル名を確認する。
コンパイラーによって違うが、C言語関数が__cdeclのときは、そのシンボル名は先頭に下線が付き、__stdcallのときは関数名そのままだったかと。
スタートメニューのVSの項目に、「なんちゃらコマンドプロンプト」というのがあるはずだ。
ソイツを起動すると黒い画面が出て来て、キーボードで「CD」コマンドで対象のフォルダに移動。
dumpbinに適当なコマンドライン引数を付けてEnter。
__stdcallやWINAPIなどを付けなければ、デフォルトで__cdeclになる。
コンパイラーによってはデフォルトの呼び出し規約を変更できるかも知れない。
複数の関数を、extern "C" { ... } で囲ってもいいし、関数の直前にextern "C"を付けてもいい。
WinMainやDllMainなど以外で自分で作った関数については、WINAPIよりもAPIENTRYを使うのがマナー。
<windows.h>の中身を覗いてみると、Win32APIの流儀が見えてくる。時間泥棒かも知れないが、それが面白い。
Boostという準標準ライブラリ群があって、Boost.DLLはその一部。APIENTRYマクロはWINAPIマクロの別名。
面倒なのが嫌なら最初からC#使え。C++は素人が来るところではない。