首页
社区
课程
招聘
[旧帖] 自己写的代码编译时报错,希望帮忙改改! 0.00雪花
发表于: 2012-3-26 22:59 4429

[旧帖] 自己写的代码编译时报错,希望帮忙改改! 0.00雪花

2012-3-26 22:59
4429
写了一点代码,但编译的时候报错,希望各位能帮帮忙
代码如下
#include "stdafx.h"
#include "shrmp.h"
#include <windows.h>
#include "mxd.h"
#include <stdio.h>
#include <winbase.h>
#include <iostream.h>
//全局变量
int gIHotF9;
BOOL showFlag;
mxd *pdlg;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BOOL APIENTRY DllMain( HINSTANCE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    switch (ul_reason_for_call)
        {
                case DLL_PROCESS_ATTACH:
                        ::CreateThread(0,0,(LPTHREAD_START_ROUTINE)ThreadProc,0,0,0);
                case DLL_THREAD_ATTACH:
                case DLL_THREAD_DETACH:
                case DLL_PROCESS_DETACH:
                        break;
    }
    return TRUE;
}
void SetHotKey()//设置热键
{
        gIHotF9 = GlobalAddAtom("show")-0xC000;       
        RegisterHotKey(NULL, gIHotF9,  0,  VK_F9);
}

void CloseHotKey()//dll卸载时,取消热键
{
        UnregisterHotKey(NULL, gIHotF9);
        DeleteAtom(gIHotF9);
}
HWND getWindowHwndByPid(DWORD pid){//根据PID获取窗口句柄
        HWND hwnd= GetTopWindow(0);
       
        DWORD windowpid=0;
        DWORD threadId=0;
        char title[200];
        while(hwnd){
                threadId=GetWindowThreadProcessId(hwnd,&windowpid);
               
                if (windowpid==pid)
                {
                        ZeroMemory(title,200);
                        GetWindowText(hwnd,title,200);//当进程有多个窗口,可以根据窗口标题判断哪个是需要注入的。
                       
                        if(IsWindow(hwnd) && IsWindowVisible(hwnd))
                        {
                                //游戏一般只有一个窗口,这里直接返回搜到的第一个窗口句柄
                                return hwnd;
                        }
                }
                hwnd = GetNextWindow(hwnd,GW_HWNDNEXT);
        }
        return 0;
}

DWORD WINAPI ThreadProc(LPCVOID lparam)
{
        HWND mainHwnd=getWindowHwndByPid(GetCurrentProcessId());//获取游戏窗口句柄,用于设置热键
       
        pdlg = new mxd;
        pdlg->Create(IDD_MXD);//创建Dll中的窗体
        pdlg->ShowWindow(SW_SHOW);//显示出来
        showFlag=TRUE;
        MSG msg;
        SetHotKey();       
        while(::GetMessage(&msg, NULL, NULL, NULL)){       
                if ( (WM_HOTKEY == msg.message) && ( GetForegroundWindow() == mainHwnd || showFlag == TRUE ))   
                {//当游戏窗体置顶,或者dll窗口被显示出来,才处理热键消息
                       
                        UINT modId;
                        UINT keyId;
                        modId = LOWORD(msg.lParam);
                        keyId = HIWORD(msg.lParam);
                       
                        //当按下Home键,并且dll窗体为隐藏
                        if (keyId == VK_F9 && !showFlag)
                        {
                                if (pdlg != NULL)
                                {
                                        if (showFlag = FALSE)       
                                        {   
                                        showFlag = TRUE;
                                        ::SetWindowPos(pdlg->GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, 3);
                                        pdlg->ShowWindow(SW_SHOW);                                       
                                        }
                                    else
                                        {
                                        showFlag = FALSE;
                                        pdlg->ShowWindow(SW_HIDE);
                                        }
                                }
                        }
                }               
                TranslateMessage(&msg);   
                DispatchMessage(&msg);
        }
        return 0;
}
报错如下!
--------------------Configuration: shrmp - Win32 Debug--------------------
Compiling...
shrmp.cpp
F:\shrmp\shrmp.cpp(43) : error C2065: 'ThreadProc' : undeclared identifier
F:\shrmp\shrmp.cpp(88) : error C2373: 'ThreadProc' : redefinition; different type modifiers
Error executing cl.exe.

shrmp.dll - 2 error(s), 0 warning(s)

不知到底错在哪里,要怎么解决!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你确定是你自己的写的???严重怀疑!!!
如果是那就仔细检查下!不是的话,好好学习!
2012-3-26 23:11
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
下面的一段的确是拿别人的改的,应该是按F9呼出与隐藏,但这个错误是真不知道怎么改了,线程函数我自己研究了很久没有错啊,按照百度的规则写的,为什么说没有定义线程函数呢,再有就是下面的线程函数是那个{那里报错,真不知道是什么意思,不过也是刚学,很多东西都不知道,要自己写代码还真是有点难度,总得拿别人的改改看看那些函数的使用,这样才能学会吧,如果你天天看书,而从来没有实现过,也未必会懂得这些函数的使用吧!
2012-3-26 23:20
0
雪    币: 2676
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2012-3-26 23:22
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
5
这样复制回去看看
#include "stdafx.h"
#include "shrmp.h"
#include <windows.h>
#include "mxd.h"
#include <stdio.h>
#include <winbase.h>
#include <iostream.h>
 //全局变量
int gIHotF9;
BOOL showFlag;
mxd *pdlg;


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

void SetHotKey()//设置热键
{
  gIHotF9 = GlobalAddAtom("show")-0xC000;  
  RegisterHotKey(NULL, gIHotF9,  0,  VK_F9); 
}

void CloseHotKey()//dll卸载时,取消热键
{
  UnregisterHotKey(NULL, gIHotF9);
  DeleteAtom(gIHotF9);
}
HWND getWindowHwndByPid(DWORD pid){//根据PID获取窗口句柄
  HWND hwnd= GetTopWindow(0);
  
  DWORD windowpid=0;
  DWORD threadId=0;
  char title[200];
  while(hwnd){
    threadId=GetWindowThreadProcessId(hwnd,&windowpid);
    
    if (windowpid==pid)
    {
      ZeroMemory(title,200);
      GetWindowText(hwnd,title,200);//当进程有多个窗口,可以根据窗口标题判断哪个是需要注入的。
      
      if(IsWindow(hwnd) && IsWindowVisible(hwnd))
      {
        //游戏一般只有一个窗口,这里直接返回搜到的第一个窗口句柄
        return hwnd;
      }
    }
    hwnd = GetNextWindow(hwnd,GW_HWNDNEXT);
  }
  return 0;
}

DWORD WINAPI ThreadProc(LPCVOID lparam)
{
  HWND mainHwnd=getWindowHwndByPid(GetCurrentProcessId());//获取游戏窗口句柄,用于设置热键
  
  pdlg = new mxd;
  pdlg->Create(IDD_MXD);//创建Dll中的窗体
  pdlg->ShowWindow(SW_SHOW);//显示出来
  showFlag=TRUE;
  MSG msg;
  SetHotKey();  
  while(::GetMessage(&msg, NULL, NULL, NULL)){  
    if ( (WM_HOTKEY == msg.message) && ( GetForegroundWindow() == mainHwnd || showFlag == TRUE ))   
    {//当游戏窗体置顶,或者dll窗口被显示出来,才处理热键消息
      
      UINT modId;
      UINT keyId;
      modId = LOWORD(msg.lParam);
      keyId = HIWORD(msg.lParam); 
      
      //当按下Home键,并且dll窗体为隐藏
      if (keyId == VK_F9 && !showFlag)
      {
        if (pdlg != NULL)
        {
          if (showFlag = FALSE)  
          {   
          showFlag = TRUE;
          ::SetWindowPos(pdlg->GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, 3);
          pdlg->ShowWindow(SW_SHOW);          
          }
            else 
          { 
          showFlag = FALSE;
          pdlg->ShowWindow(SW_HIDE);
          }
        }
      }
    }    
    TranslateMessage(&msg);   
    DispatchMessage(&msg); 
  }
  return 0;
}

BOOL APIENTRY DllMain( HINSTANCE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
           )
{
    switch (ul_reason_for_call)
  {
    case DLL_PROCESS_ATTACH:
      ::CreateThread(0,0,(LPTHREAD_START_ROUTINE)ThreadProc,0,0,0);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
      break;
    }
    return TRUE;
}
2012-3-27 00:55
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
版主,你能不能告诉我这个到底是什么原因啊,光看代码还是不知道怎么回事啊,我刚学的!
2012-3-27 12:19
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
  我是是说自己写的自己比较了解仔细检查过后一般能解决问题。
2012-3-27 17:30
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
8
DllMain中引用了函数ThreadProc, ThreadProc在下面定义的,编译器编译期间找不到符号,
还不明白就找本c/c++书籍去看看c/c++语法~
2012-3-27 18:58
0
游客
登录 | 注册 方可回帖
返回
//