eMule1.46c源代码分析问题

夜魔009 项目经理  2005-09-28 01:34:06
最近下载了eMule1.46c的源代码想学习一下,结果发现自己真是才疏学浅啊,找了一个晚上也没能找到整个工程的入口点,一般win32的应用程序的入口不是winmain吗?除此之外还有别的方法让编译器从一大堆函数中知道哪个是入口吗?如果是用HOOK钩子,将整个应用程序加载,那么钩子的编程中也应该有入口点的啊!可是我就是没能找得到,还请高手指教,eMule的作者到底使了什么样的设计思路呢?真是很奇妙。这次看来是选对学习的例程了。我怀疑可能源代码没给全,可是我自己进行了release模式的编译,生成的eMule和下载的想比就只是去少了些语言库还有服务器的列表文件罢了,真是太奇怪了,程序的入口在哪里呢?这是我编译eMule的过程,Debug版本编译始终不成功,不然就可以找到入口了。还请高手指点,入口或者debug模式的编译方法都可以,谢谢了。
http://blog.csdn.net/supperman_009/services/trackbacks/491315.aspx

现存的问题
http://community.csdn.net/Expert/topic/4299/4299351.xml
...全文
426 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
一帆 2006-06-19
CVS?
我进过,不过是 emule
回复
citysheep 2006-01-20
变成讲MFC的了,啊。我把emule编译是通过了,但是调试时居然有内存访问冲突,不知道是下载的代码不对还是库没有编译好,现在头痛呢。有谁知道怎么进sourceforge里emule的CVS吗?
回复
steel007 2005-10-07
emule万万全全就是一个MFC程序,很多open source的程序都是MFC高手写就的:)
回复
shicheng521 2005-10-06
学习
学习
回复
flashboy 2005-10-06
MFC的应用. 你去看看MFC相关的书<MFC深入浅出>
回复
Stefine 2005-10-06
winmain被定义在MFC的源码中,你在MFC的SRC文件下找到APPMODUL.CPP文件下可以找到AfxWinMain()的定义

这其实就是对WinMain的封装,这是下面具体的定义

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);

int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();

// AFX internal initialization
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
goto InitFailure;

// App global initializations (rare)
if (pApp != NULL && !pApp->InitApplication())
goto InitFailure;

// Perform specific initializations
if (!pThread->InitInstance())
{
if (pThread->m_pMainWnd != NULL)
{
TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");
pThread->m_pMainWnd->DestroyWindow();
}
nReturnCode = pThread->ExitInstance();
goto InitFailure;
}
nReturnCode = pThread->Run();

InitFailure:
#ifdef _DEBUG
// Check for missing AfxLockTempMap calls
if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
{
TRACE1("Warning: Temp map lock count non-zero (%ld).\n",
AfxGetModuleThreadState()->m_nTempMapLock);
}
AfxLockTempMaps();
AfxUnlockTempMaps(-1);
#endif

AfxWinTerm();
return nReturnCode;
}

至于上面所说的WINAPP这里入口,这其实是指靠 CMyWinApp theApp;
或CWinApp pApp = AfxGetAPP(); 引发一系列的动作,导致程序的开始运行直到结束

至于中间引起的一系列活动,大家看看深入浅出MFC 就会明白了

不在这里献丑

一起学习ing
回复
mynamelj 2005-10-06
晕~~这个源代是基于MFC的,你当然找不到入口了.
回复
kaimulj 2005-10-03
MFC程序肯定找不到WinMain啦,都被包装到MFC自己类库里面落
回复
sevencat 2005-10-03
网上有人做了wxwidgets的emule的移植的,不过建议你先强化一下基础知识的学习。
回复
lemon_wei 2005-09-30
多谢楼主,也下载个看看去
回复
phoenix96_2000 2005-09-29
既然MFC编程都还不太熟悉,
你不要管emule了,
看看深入浅出MFC可以了解MFC程序的生死来源


MS的向来是对工业标准支持较好,只不过会加上很多扩展...

回复
夜魔009 2005-09-29
http://internap.dl.sourceforge.net/sourceforge/emule/eMule0.46c-Sources.zip
eMule的下载地址,是sourceforge的,下载排行很靠前,位居第二
回复
夜魔009 2005-09-29
eMule的确时有CemuleApp类继承自CwinApp但是,我知道它的入口了。我想知道,一个开源的项目也可以使用MFC来编程嘛?如果我不想使用MFC框架,而想使用wxWidgets-2.6.1(wxWindows)的窗口框架系统,又该怎么办呢?原先学c++据说VC++对C++的标准支持的不好,就美有在MFC上下功夫,只是浅浅的看了一下,一般都是直接在它的向导模式下用的,而且那时是6.0,现在是VC.net2003(7.10)了,看到完工的MFC的工程源代码,根本就分不出哪些是机器自动的,那些是人工写的。我看eMule好像只是用MFC的CwinApp做了一下程序的入口,其它看不到标准MFC工程的痕迹,小的很菜,请高手指点一下。还有eMule中的确是找不到WinMain的,已经被CWinAPP深深隐藏了,源代码中根本没有。我要是连搜索都不会用的话,就会在编程上混了。
回复
xxrl 2005-09-29
呵呵
回复
phoenix96_2000 2005-09-28
就是基于MFC的,程序入口和一般MFC程序一样
找到winmain很简单,f7执行就可以发现在哪儿了

不过编译是要费点时间
回复
keios 2005-09-28
说错了,是 0.46c
^_^
回复
keios 2005-09-28
你说的是emule 0.47c 吧,它是基于mfc的应用程序,入口是 CemuleApp 类,熟悉mfc 的同志们应该不会陌生吧。
回复
wshcdr 2005-09-28
MARK
回复
hanxian 2005-09-28
哪有得下载,
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-09-28 01:34
社区公告
暂无公告