C++ C++;插件架构设计

C++ C++;插件架构设计,c++,windows,winapi,mfc,C++,Windows,Winapi,Mfc,我有一个通用设计问题。我正在创建一个小应用程序,它提供了一个简单的SDK来创建DLL插件。插件将向应用程序注册一些参数,因此用户可以在GUI中以某种方式填充这些参数,应用程序将为插件设置这些值: struct Param{ const char* name; Value value }; 导出的DLL函数GetList()将为GUI提供参数列表。用户可以使用另一个导出函数SetParam(…)更改这些参数并将它们发送回DLL。问题恰恰是选择值。目前我正在使用variant,但可能有更好的方法使

我有一个通用设计问题。我正在创建一个小应用程序,它提供了一个简单的SDK来创建DLL插件。插件将向应用程序注册一些参数,因此用户可以在GUI中以某种方式填充这些参数,应用程序将为插件设置这些值:

struct Param{ const char* name; Value value };

导出的DLL函数
GetList()
将为GUI提供参数列表。用户可以使用另一个导出函数
SetParam(…)
更改这些参数并将它们发送回DLL。问题恰恰是选择
。目前我正在使用
variant
,但可能有更好的方法使其更灵活和可扩展?如果我必须添加一个组合框中分组的参数列表,这个解决方案是不合适的。可能我需要为它们设置几个类,比如
IntParam
comboxparam
,等等。我想知道其他观点。

C++是一种强类型语言。每个对象的类型必须在编译时已知。这条规则没有例外。因此,对于类似的情况,您可能还必须提供值的一般定义,以及可以对该值执行的操作,以便主代码不需要知道值的类型。比<代码> STD:有更多的东西::< < /代码>。也许?<代码> 1 <代码>,你不可能在一个DLL边界上永远地传输C++对象。代码> 2 com已经解决了这个问题,2多年前。@ PtasasZNI看起来很有趣,但似乎有点超出工程。C++没有明确定义的ABI。也就是说,不能将C++对象从编译到一个编译器的代码传递到使用不同编译器编译的代码(或者甚至使用同一编译器,使用不同版本,或者只是不同的编译器选项)。至少,您的接口将是C,但即使这样也不能解决围绕分配器的问题。您可以自由地进行一些研究,但您会发现提供插件接口的所有应用程序都可以使用COM,或者提供自己的系统来复制COM的保证(ABI、分配器、线程模型)。C++是强类型语言。每个对象的类型必须在编译时已知。这条规则没有例外。因此,对于类似的情况,您可能还必须提供值的一般定义,以及可以对该值执行的操作,以便主代码不需要知道值的类型。比<代码> STD:有更多的东西::< < /代码>。也许?<代码> 1 <代码>,你不可能在一个DLL边界上永远地传输C++对象。代码> 2 com已经解决了这个问题,2多年前。@ PtasasZNI看起来很有趣,但似乎有点超出工程。C++没有明确定义的ABI。也就是说,不能将C++对象从编译到一个编译器的代码传递到使用不同编译器编译的代码(或者甚至使用同一编译器,使用不同版本,或者只是不同的编译器选项)。至少,您的接口将是C,但即使这样也不能解决围绕分配器的问题。您可以自由地进行一些研究,但您会发现所有提供插件接口的应用程序要么使用COM,要么提供自己的系统来复制COM的保证(ABI、分配器、线程模型)。