求助unresolved externals这个错误怎么处理

zhuzuo 2011-03-10 05:34:37
#include"windows.h"
#include"stdlib.h"
#include"string.h"
void WINAPI CaretPos(int *xCaret,int *yCaret);
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{MSG Message;
if(!InitWindowsClass( hInstance))
return FALSE;
if(!InitWindows( hInstance, nCmdShow))
return FALSE;
while(GetMessage(&Message,NULL,0,0))
{TranslateMessage(&Message);
DispatchMessage(&Message);}
return Message.wParam;}
long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam)
{
static char cCharBuf[30];
static int nNumChar=0, nArrayChar=0;
int x=0;
static int xCaret=0,yCaret=0;
HDC hDC;
PAINTSTRUCT Pt;

switch(iMessage)
{case WM_CHAR:
if(wParam==VK_ESCAPE)
MessageBox(hWnd,"您现在不能按Esc键,请继续其他操作",NULL,MB_OK);
else if(nNumChar==30)
MessageBox(hWnd,"缓冲区已满不能再输入字符了\n若需要删除字符,请用BackSpace键",NULL,MB_OK);
else if(wParam==VK_DELETE)
{if(nNumChar==0)
MessageBox(hWnd,"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else
cCharBuf[x-1]=cCharBuf[x];
nNumChar--;
CaretPos( &xCaret, &yCaret);
InvalidateRect(hWnd,NULL,1);}
else if(wParam==VK_LEFT)
{if(nArrayChar==0)
MessageBox(hWnd,"您已经移动到起始位置,不能再移动了",NULL,MB_OK);
else
nArrayChar--;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);
}
else if(wParam==VK_BACK)
{if(nArrayChar==0)
MessageBox(hWnd,"当前位置是文本的起始位置,不能回退",NULL,MB_OK);
else
nArrayChar--;
nNumChar--;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);}
else
cCharBuf[nArrayChar]=(unsigned char)wParam;
nArrayChar++;
nNumChar++;
CaretPos(&xCaret,&yCaret);
InvalidateRect(hWnd,NULL,1);
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&Pt);
TextOut(hDC,0,0,cCharBuf,strlen(cCharBuf));
EndPaint(hWnd,&Pt);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,iMessage,wParam,lParam);
break;}
return 0;}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{HWND hWnd;
hWnd=CreateWindow("MT",
"键盘操作例程",
WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

if(!hWnd)
return FALSE;
hWndMain=hWnd;
ShowWindow( hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;}
BOOL InitWindowsClass(HINSTANCE hInstance)
{WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="MT";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
这是一个Win32程序运行时候会出现Linking...
ok.obj : error LNK2001: unresolved external symbol "void __stdcall CaretPos(int *,int *)" (?CaretPos@@YGXPAH0@Z)
Debug/ko.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

这两个错误,求高手指点
...全文
489 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzuo 2011-03-10
  • 打赏
  • 举报
回复
void WINAPI CaretPos(int *px, int *py)
{
POINT pt;
GetCaretPos(&pt);
*px = pt.x;
*py = pt.y;
}


我刚才试了这个了可以运行,能不能解释一下,不胜感激!
zhuzuo 2011-03-10
  • 打赏
  • 举报
回复
我是根据书上面写的,但老是出现这个错误不知道怎么解决啊
fangchao918628 2011-03-10
  • 打赏
  • 举报
回复
这不是你自己写的函数么?只看见你有定义,没看见你实现这个函数
lazy_2010 2011-03-10
  • 打赏
  • 举报
回复
自己实现一个呗

void WINAPI CaretPos(int *px, int *py)
{
POINT pt;
GetCaretPos(&pt);
*px = pt.x;
*py = pt.y;
}
zhuzuo 2011-03-10
  • 打赏
  • 举报
回复
就是确定光标的位置吧
fangchao918628 2011-03-10
  • 打赏
  • 举报
回复
CaretPos函数实现在哪里......

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧