1

私は午前中ずっとグーグルを検索していて、探しているものが見つからないのです。MFC用に変更されたVisualStudioで通常のDLLを作成しています。つまり、プロジェクトウィザードで、

Win32 Project -> DLL -> MFC

ウィザードのメインリストからMFCDLLをクリックしただけではありません。これは、オンラインのすべてのチュートリアルで説明されていたものです。

私の質問は簡単です。.cppファイルでは、関数の内部または外部でメソッド(.hファイルで宣言されている)を実装することになっているのかどうかを知る必要があります。_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;
}
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 に答える