次の奇妙なコードのチャンクに遭遇しました。次の typedef があると想像してください。
typedef int (*MyFunctionPointer)(int param_1, int param_2);
そして、関数では、次の方法で DLL から関数を実行しようとしています。
LPCWSTR DllFileName; //Path to the dll stored here
LPCSTR _FunctionName; // (mangled) name of the function I want to test
MyFunctionPointer functionPointer;
HINSTANCE hInstLibrary = LoadLibrary( DllFileName );
FARPROC functionAddress = GetProcAddress( hInstLibrary, _FunctionName );
functionPointer = (MyFunctionPointer) functionAddress;
//The values are arbitrary
int a = 5;
int b = 10;
int result = 0;
result = functionPointer( a, b ); //Possible error?
問題は、LoadLibrary で取得したアドレスの関数が 2 つの整数引数を取るかどうかを知る方法がないことです。DLL 名は実行時にユーザーによって提供され、エクスポートされた関数の名前がリストされ、ユーザーテストするものを選択します(実行時も :S:S )。では、最後の行で関数呼び出しを行うことで、スタック破損の可能性への扉を開いているのではないでしょうか? これがコンパイルされることはわかっていますが、指している関数に間違った引数を渡した場合、どのような実行時エラーが発生するのでしょうか?