1

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

Win32 Project -> DLL -> MFC

只是从向导的主列表中单击 MFC DLL,这是所有在线教程所描述的。

我的问题很简单。在 .cpp 文件中,我只需要知道我应该在函数内部还是外部_tmain实现我的方法(在 .h 文件中声明) 。 里面有一条评论说

//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;
}
4

2 回答 2

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!");
}
于 2013-02-28T14:52:11.667 回答
1

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

当您使用向导创建 DLL 时,您应该添加一个头文件来定义您的 DLL 接口。你应该添加一个 .CPP 源文件来实现函数。

您可以在找到的那个地方调用函数

// TODO: change error code to suit your needs

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

于 2013-02-28T14:52:37.743 回答