/*
* 這是 DLL 裡面的 Function
*/
__declspec(dllexport) int __cdecl add(int a, int b)
{
return a + b;
}
/*
* DLL的客戶端程式
*/
#include <Windows.h>
typedef int (__cdecl *BinaryOp)(int op1, int op2);
int _tmain(int argc, _TCHAR* argv[])
{
BinaryOp bop;
HMODULE lib = LoadLibrary(_T("D:\\VC_Projects\\DllTest\\Debug\\DllTest.dll"));
if (lib != NULL)
{
// 下面這個詭異的名稱是用 Dependency Walker 看到的
bop = (BinaryOp)GetProcAddress(lib, "?add@@YAHHH@Z");
if (bop != 0)
{
printf("add(5, 9) = %d\n", bop(5, 9));
}
}
return 0;
}
LyoKICog6YCZ5pivIERMTCDoo6HpnaLnmoQgRnVuY3Rpb24KICovCgpfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IF9fY2RlY2wgYWRkKGludCBhLCBpbnQgYikKewoJcmV0dXJuIGEgKyBiOwp9CgoKLyoKICogRExM55qE5a6i5oi256uv56iL5byPCiAqLwoKI2luY2x1ZGUgPFdpbmRvd3MuaD4KCnR5cGVkZWYgaW50IChfX2NkZWNsICpCaW5hcnlPcCkoaW50IG9wMSwgaW50IG9wMik7CgppbnQgX3RtYWluKGludCBhcmdjLCBfVENIQVIqIGFyZ3ZbXSkKewoJQmluYXJ5T3AgYm9wOwoKCUhNT0RVTEUgbGliID0gTG9hZExpYnJhcnkoX1QoIkQ6XFxWQ19Qcm9qZWN0c1xcRGxsVGVzdFxcRGVidWdcXERsbFRlc3QuZGxsIikpOwoJaWYgKGxpYiAhPSBOVUxMKQoJewoJCS8vIOS4i+mdoumAmeWAi+ipreeVsOeahOWQjeeoseaYr+eUqCBEZXBlbmRlbmN5IFdhbGtlciDnnIvliLDnmoQKCQlib3AgPSAoQmluYXJ5T3ApR2V0UHJvY0FkZHJlc3MobGliLCAiP2FkZEBAWUFISEhAWiIpOwoJCWlmIChib3AgIT0gMCkKCQl7CgkJCXByaW50ZigiYWRkKDUsIDkpID0gJWRcbiIsIGJvcCg1LCA5KSk7CgkJfQoJfQoKCXJldHVybiAwOwp9