0

因此,在推迟了多年并且不知道从哪里开始之后,我才开始尝试仿真,我已经成功地编写了我的第一个仿真器!现在我正在组织我的代码,以便我可以重用代码来模拟其他系统。我一直在考虑拥有一个共享前端“平台处理程序”的想法,我将其编译为我的可执行文件,而我会将我的模拟系统代码编译成平台处理程序将用来识别可用内容并从中实例化的 dll . 这将允许我将我的代码分成不同的项目,并保留使用具有更多功能的笨重前端或简化的“仅限游戏”的选项,并在它们之间共享相同的 dll,而不是制作两个不同的解决方案。

我知道如何编译 dll 与可执行文件,但我不知道如何将可执行文件链接到自定义 dll,以便我可以从中实例化一个类。我什至不确定我正在尝试做的事情在技术上是否可行。dll类需要是静态的吗?我以前从来没有编写过这样的代码,甚至没有用自定义 dll 做过很多事情,所以任何帮助或想法都将不胜感激。顺便说一句,我正在使用 Visual C++ 2010。提前感谢任何人可能有的任何建议。

4

1 回答 1

0

你真的不需要做很多不同的事情。只需像导出函数一样从 dll 中导出类。在您的应用程序中,像往常一样包含生成的库的标题和链接。请参阅此页面:http: //msdn.microsoft.com/en-us/library/81h27t8c%28v=vs.80%29.aspx

例子.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();

例子.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 在加载时将它们的实现注册到你的应用程序中。您可以永远扩展,甚至无需重新构建您的主可执行文件。

于 2011-03-16T18:21:42.583 回答