我在哪里实现我的MFC DLL函数?

时间:2013-02-28 14:43:32

标签: c++ windows class dll mfc

我整个上午一直在搜索谷歌,但我无法找到我正在寻找的东西。我正在为MFC修改的Visual Studio中创建一个常规DLL。也就是说,在项目向导中,我选择了

Win32 Project -> DLL -> MFC

我做了 NOT 只需从向导的主列表中单击MFC DLL,这就是所有在线教程所描述的内容。

我的问题很简单。在.cpp文件中,我只需要知道我是否应该实现我的方法(在.h文件中声明) in outside _tmain功能。 里面有一条评论说

//TODO: code your applications behavior here

但我不确定这是否是我实施的地方。

供参考,这是.cpp文件:

// testmfcdllblah.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "testmfcdllblah.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(NULL);

    if (hModule != NULL)
    {
        // initialize MFC and print and error on failure
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO: change error code to suit your needs
            _tprintf(_T("Fatal Error: MFC initialization failed\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO: code your application's behavior here.
        }
    }
    else
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
        nRetCode = 1;
    }

    return nRetCode;
}

2 个答案:

答案 0 :(得分:1)

由于您无法在其他函数中实现函数/方法,因此您的方法实现需要超出_tmain函数。

您引用的注释块可以替换为提供库的初始化实现。

因此,如果您声明像SayHello这样的函数,那么这可能是这样的:

testmfcdllblah.h

// Declaration
void SayHello(void);

testmfcdllblah.cpp

void _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    // .. all the other stuff ..

    // TODO: code your application's behavior here.
    SayHello();

    // .. the rest of the other stuff ..
}

void SayHello()
{
    AfxMessageBox("Hello!");
}

答案 1 :(得分:1)

在C ++中,您无法定义本地函数。你永远不会在_tmain中实现任何功能。

使用向导创建DLL时,应添加一个头文件,用于定义DLL的接口。并且您应该在实现函数的位置添加.CPP源文件。

您可以在找到

的地方调用功能
// TODO: change error code to suit your needs

BTW:我不知道为什么动态链接库的向导会创建一个主函数。