VC ++:使用DLL作为“子程序”

时间:2011-03-16 17:56:08

标签: visual-c++ dll linker multiple-projects

因此,我开始尝试仿效多年之后,不知道从哪里开始,我已成功编写了我的第一个模拟器!现在我正在组织我的代码,以便我可以重用代码来模拟其他系统。我一直在想要有一个共享的前端“平台处理程序”,我将编译为我的可执行文件,而我将我的模拟系统代码编译成dll,平台处理程序将使用它来识别可用的内容并从中实例化。这将允许我将我的代码分成不同的项目,并使选项更加开放,使用更强大的前端和更多功能或简化的“仅游戏”,并在它们之间共享相同的dll,而不是制作两种不同的解决方案。 / p>

我知道如何编译dll vs可执行文件,但我不知道如何将可执行文件链接到自定义dll,以便我可以从中实例化一个类。我甚至不确定我在做什么是技术上可行的。 dll类需要是静态的吗?我以前从来没有编写任何类似的东西,甚至在定制dll上做了很多,所以任何帮助或想法都会受到赞赏。顺便说一句,我正在使用Visual C ++ 2010。提前感谢任何人的建议。

1 个答案:

答案 0 :(得分:0)

你真的不必做太多不同。只需像执行函数一样从dll中导出类。在您的应用中,像往常一样包含标题和生成的lib的链接。查看此页面:http://msdn.microsoft.com/en-us/library/81h27t8c%28v=vs.80%29.aspx

example.h文件

#ifdef DLL_EXPORT
#define EXPORT_API __declspec(dllexport)
#else
#define EXPORT_API __declspec(dllimport)
#endif

class EXPORT_API Example
{
public:
    Example();
    ~Example();

    int SomeMethod();
};

int EXPORT_API ExampleFuncion();

Example.cpp

#include "Example.h"

Example::Example()
{
    // construct stuff
}

Example::~Example()
{
    // destruct stuff
}

int Example::SomeMethod()
{
    // do stuff
    return 0;
}

int EXPORT_API ExampleFunction()
{
    return 0;
}

在您的dll项目中,定义DLL_EXPORT并构建。您将获得.lib.dll输出。在您将使用dll的主项目中,除了包含.lib的标题和链接之外,您不必执行任何操作。不要在主项目中定义DLL_EXPORT符号,并确保.dll位于应用程序可以找到的位置。

如果你真的想变得聪明,这个问题就是为工厂设计模式而尖叫。如果你设计的界面足够好,你可以让你的dll在你的应用程序加载时注册它们的实现。您甚至可以在不重建主要可执行文件的情况下永久扩展。