我有一些应用程序和静态库的C ++解决方案:
在申请中,我只是模拟种族,每个种族的一个申请。 Libs包括描述汽车部件(车身,车轮,发动机等)的类。每个类都实现了一些在Garage lib中描述的接口(IBody,IWheels,IEngine等)。而Garage.lib应该使用零件来制造汽车。
因此,我将汽车参数传递给应用程序,例如:-Car1 -RedBody -MiddleWheels -V8Engine -RaceTires -Car2 -BlueBody -SmallWheels -V12Engine -WinterTires。应用程序调用Garage类:Garage :: GetCar(字符串体,字符串轮,字符串引擎,字符串轮胎)和车库返回Car对象,我们在app中使用。请注意,我将这些参数传递给字符串。这很重要。
现在,关于我想要什么。我只写了Garage lib。其他libs将由其他人写。我希望我的图书馆已经普及。此时,当添加新部件(例如BlackBody.lib)时,我必须在我的Garage.lib中添加对此的支持。类似的东西:
...
else if (body == "RedBody")
{
car->body = new RedBody();
}
else if (body == "BlackBody")
{
car->body = new BlackBody();
}
...
但我希望动态地获得这种类型。像:
foreach (Librarian lib in Application.GetLibs())
{
foreach (Type type in lib)
{
if (type is IBody)
{
if (((IBody)type)::GetColor() == color)
{
car->body = type.GetInstance();
return;
}
}
}
}
然后,如果有人添加新类型,我将不会更改我的库。问题是,我用C ++写的,而不是C#。我不知道如何实现它。
也许我应该使用dll而不是静态lib?这是唯一的方法吗?如果是这样,是否会出现应用程序和dll使用一个库(Garage.lib)的问题?因为他们使用不同的运行时库(/ MT和/ MD)。
答案 0 :(得分:1)
您可以使用DLL完全“动态”解决方案,前提是:
您应避免在同一过程中混合使用不同的CRT。混合是可能的,但需要额外的照顾/工作。