VC++开发插件,该如何解决

VC++开发插件
请问,如果我想用VC++开发一个应用程序插件,该怎么办呀?
比如:我现在要开发一个程序实现排序功能,应用程序有如下几个模块:
main.exe //主应用程序模块
sort.dll //执行排序功能的dll模块

但是现在因为排序有很多种,比如快速排序,堆排序,选择排序,交换排序等等,我想把每一种排序算法实现在一个插件之中,如下:
快速排序:fast_sort.dll
堆排序 :heap_sort.dll
选择排序:select_sort.dll
交换排序:swap_sort.dll
而每个dll将以插件式实现,在调用的时候,sort.dll将调用插件中的排序功能直接实现排序,而sort.dll模块不需要知道排序算法的具体实现细节。
另外,如果以后还要增加一些其他的排序算法,只需要自己写一个排序算法的插件dll,在执行的时候就可以由sort.dll直接调用它就可以了:
比如:我现在新增加了一个希尔排序算法,我就可以自己写一个shell_sort.dll,在dll中希尔排序算法就可以了。

现在的问题是在sort.dll与插件dll之间如何关联起来?请高手指点。。。

------解决方案--------------------
定义接口啊, DLL定义接口的方式有
1. export一个函数
2. 通过COM的方式实现一个COM对象
------解决方案--------------------
,i don't know the problem
------解决方案--------------------
(1)每个插件开放接口统一。例如 插件开放接口有 IsSwentPlug,Sort。。那么每个插件至少要开放这两接口(导出函数),而且参数一样。
(2)动态加载插件方式执行插件相应函数。
定义函数指针:typedef bool (*IsSwentPlugFunc)();
加载:HMODULE hPlug = LoadLibrary("插件路径");
获取插件函数地址:IsSwentPlugFunc IsSwentPlug = (IsSwentPlugFunc)GetProcAddress(hPlug, "IsSwentPlug");
执行插件函数:bool bSuc = IsSwentPlug();
函数Sort执行方法一样
------解决方案--------------------
正解,就是DLL的动态加载

探讨

(1)每个插件开放接口统一。例如 插件开放接口有 IsSwentPlug,Sort。。那么每个插件至少要开放这两接口(导出函数),而且参数一样。
(2)动态加载插件方式执行插件相应函数。
定义函数指针:typedef bool (*IsSwentPlugFunc)();
加载:HMODULE hPlug = LoadLibrary("插件路径");
获取插件函数地址:IsSwentPl……