记一次VS2010学写代码过程(五)

        剧情应该结束了,还要写什么………………想想那个找不到hProcess还没有解决,于是我在家里用WIN10来用两种方式运行代码,都能够显示注入窗口,那问题应该还是出现在XP系统,或是XP系统的VS2010设置上,我就想既然VS2010对XP系统的兼容不是很好,那VC6++是完全32位系统的编译器,应该没有问题吧,况且视频的作者也说VC6VC7等等都可以,只是大同小异,那我还是用VC6++来编译此段代码,打开VC6++直到将要注入的窗口类化后,马上问题就来了,VS2010中有InitInstance这个函数,而VC6++却没有这个函数,自己动手加又提示InitInstance函数没有包括在类中,于是网上查资料,找了半天,终于找到两个关于VC6++的半天InitInstance函数的贴子,都是在CSDN这个网上,具体参照

 https://bbs.csdn.net/topics/392401954?page=1

大概提供这样的代码

#include<afxwin.h>
class CMyApp : public CWinApp
{
       virtual BOOL InitInstance()
       {
            
              return TRUE;
       }
};
CMyApp theApp;

我看到最后一行 代码 CMyApp theApp;说明他是要写在MFC_DLL.cpp 里,于是我把这段代码加到MFC_DLL.cpp,代码如下:

报错,错误意思大概是CMFC_DLLApp这个类重复定义了,那应该是在这里:

按上面的代码我就改成

InitInstance()函数有了,编译无错,然后在MFC_DLL.cpp

报错,CMFC_DLLApp::InitInstance()已经存在了,再在刚才那个贴子里已经找不出任何可用信息了,再在网上查,又被我找到一篇  https://bbs.csdn.net/topics/390868793

大至也是这样的,VC6++虽然有初始化类,但是不会生成InitInstance函数的,继承了主类,要自己重写一下这个InitInstance函数,对于我这新人,重写函数倒是有听到过,但是要自己去写,头脑还是一片空白,打开VS2010已经OK的MFC_DLL工程,对照两个类里的代码有什么不同:

我擦,这VS2010里已经给了重写入口函数InitInstance()的代码,于是完全的COPY到VC6++里

是不是MFC_DLL.cpp里没有加入口函数BOOL CMFC_DLLApp::InitInstance()的原因?加上这个

编译成功,注入一下,果然,卡住的注入

既然已经到了这一步,那么问题应该也已经解决了,那么继续,都走到这一步了,把下面的走完,让程序自己注入而不是另外用软件注入,就这样,把VS2010的InjectDll.cpp代码COPY到VC6++的InjectDll.cpp中,修改几处代码,

不错已经用VC6++成功的编译了,那就还差最后一步的,在目录下运行是不是和编译器里运行一样的结果还是和VS2010的呢,先得改下VC6++的工程目录

>>>>>>>

调试目录:

现编译,已经接近完美了,和编译器里的结果一样

既然VC6++编译的和VS2010都 一样,而且VC6++的优势启动快,对32系统支持好,那就暂时用VC6++了,下一步再去研究为何VS2010两种编译的结果不一样。

至此应该是大结局了吧,我就想,VC6++既然有这个入口函数为何还要自己去重写呢,继续打开VC6++随便新建一个项目,再插入一个Dialog的资源窗口,类化,即建立类向导,发现这个

VC6++已经有了这个函数了,进去看看

那么我就切换到CMYDLLApp这个类名下

双击下面的成员函数窗口直接跳到MYDLL.cpp,如下

真是踏破铁鞋那啥了,再次切换到页面卡ClassView上,看下代码有什么不一样

这里就在左边加了一个InitInstance() 函数,而代码没有改动了,看来只需要在MYDLL.cpp里重写下InitInstance()这个函数就OK了,再次申明,本人新手。

猜你喜欢

转载自blog.csdn.net/hsoftk/article/details/81142930