我整个上午一直在搜索谷歌,但我无法找到我正在寻找的东西。我正在为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;
}
答案 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:我不知道为什么动态链接库的向导会创建一个主函数。