// declare base_func; mark it as a load-time imported symbol __declspec(dllimport) void base_func(void); // setup plugin_func as a function pointer so that it can be linked at run time typedef void PLUGIN_Func(void); PLUGIN_Func *plugin_func = 0; // need to include for LoadLibraryA/LoadLibraryW and GetProcAddress #include // helper macro for GetProcAddress that handles the casting of function pointers #define GET_PROC(var,mod,name) *((FARPROC*)(&(var))) = GetProcAddress((mod),(name)) int main(){ // functions linked by load-time linking can be called directly without further setup base_func(); // to call a function with run-time linking, we must manually load and link it HMODULE module = LoadLibraryA("win32_plugin.dll"); if (module != 0){ GET_PROC(plugin_func, module, "plugin_func"); } // calls to plugin_func only work after the "plugin" loaded successfully if (plugin_func != 0){ plugin_func(); } // demonstration: the data structures contained in the 'base' are not duplicated in each binary base_func(); }