为什么会出现这种错误???

dreamup 2004-03-23 12:37:26
编绎能够正常通过,但却无法创建.exe文件。。。。。

提示说:
--------------------Configuration: keyboard - Win32 Debug-----------------
Linking...
LINK : fatal error LNK1168: cannot open Debug/keyboard.exe for writing
Error executing link.exe.

keyboard.exe - 1 error(s), 0 warning(s)

源码如下:

#include"windows.h"
#include"stdlib.h"
#include"string.h"
long WINAPI WndProc
( HWND hWnd,
UINT iMessage,
UINT wParam,
LONG lParam
);
void WINAPI CaretPos(HWND hWnd,int nArrayPos,char *cCharBuf,int *xCaret,int *yCaret,int nCharWidth);
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,0,0,0))
{TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc
(HWND hWnd,
UINT iMessage,
UINT wParam,
LONG lParam)
{
#define BufSize 30
static char cCharBuf[BufSize];
static int nNumChar=0;
static int nArrayPos=0;
static int nLnHeight;
static int nCharWidth;
static int xCaret, yCaret;
int x;
HDC hDC;
TEXTMETRIC tm;
PAINTSTRUCT PtStr;
switch(iMessage)
{
case WM_CHAR:
{ if(wParam==VK_BACK)
{ if(nArrayPos==0)
MessageBox(hWnd, "当前位置是文本的起始位置,不有回退",NULL,MB_OK);
else
{
nArrayPos=nArrayPos-1;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
for(x=nArrayPos;x<nNumChar;x=x+1)
cCharBuf[x]=cCharBuf[x+1];
nNumChar=nNumChar-1;
InvalidateRect(hWnd,NULL,TRUE);
}
break;
}
if(wParam==VK_ESCAPE)
{
MessageBox(hWnd,"您现在不能按ESC键,请继续其他操作",NULL,MB_OK);
break;
}

if(nNumChar>=BufSize)
{
MessageBox(hWnd, "缓冲区已满,不能再输入字符了\n若需要删除字符,请用BackSpace键",NULL,MB_OK);
break;
}
for(x=nNumChar;x>nArrayPos;x=x-1)
cCharBuf[x]=cCharBuf[x-1];
cCharBuf[nArrayPos]=(unsigned char)wParam;
nArrayPos=nArrayPos+1;
nNumChar=nNumChar+1;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
InvalidateRect(hWnd,NULL,TRUE);
}
break;
case WM_CREATE:
hDC=GetDC(hWnd);
GetTextMetrics(hDC,&tm);
nLnHeight=tm.tmHeight+tm.tmExternalLeading;
nCharWidth=tm.tmAveCharWidth;
yCaret=nLnHeight;
ReleaseDC(hWnd,hDC);
break;
case WM_SETFOCUS:
CreateCaret(hWnd,0,0,nLnHeight);
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
ShowCaret(hWnd);
break;
case WM_KILLFOCUS:
DestroyCaret();
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_END:
nArrayPos=nNumChar;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
break;
case VK_HOME:
nArrayPos=0;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
break;
case VK_DELETE:
if(nArrayPos==nNumChar)
MessageBox(hWnd,"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else
{for(x=nArrayPos;x<nNumChar;x=x+1)
cCharBuf[x]=cCharBuf[x+1];
nNumChar=nNumChar-1;
InvalidateRect(hWnd,NULL,TRUE);
}
break;
case VK_LEFT:
if(nArrayPos>0)
{
nArrayPos=nArrayPos-1;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
}
else
MessageBox(hWnd,"您已经移动到起始位置,不能再住前了",NULL,MB_OK);
break;
case VK_RIGHT:
if(nArrayPos<nNumChar)
{
nArrayPos=nArrayPos+1;
CaretPos(hWnd,nArrayPos,cCharBuf,&xCaret,&yCaret,nCharWidth);
}
else
MessageBox(hWnd,"已经到缓冲区末,不能再向右移动了 ",NULL,MB_OK);
break;
}
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&PtStr);
TextOut(hDC,nCharWidth,nLnHeight,cCharBuf,nNumChar);
EndPaint(hWnd,&PtStr);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
void WINAPI CaretPos(HWND hWnd, int nArrayPos, char *cCharBuf,int *xCaret,int *yCaret,int nCharWidth)
{
DWORD dWord;

HDC hDC;

hDC=GetDC(hWnd);
ReleaseDC(hWnd,hDC);
*xCaret=LOWORD(dWord)+nCharWidth;
SetCaretPos(*xCaret,*yCaret);
}


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="WinKeyboard";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("WinKeyboard",
" 键盘操作例程",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
hWndMain=hWnd;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjs720 2004-03-23
  • 打赏
  • 举报
回复
打开进程管理器,把keyboard结束掉
zhaoriyue 2004-03-23
  • 打赏
  • 举报
回复
LINK : fatal error LNK1168: cannot open Debug/keyboard.exe for writing
如果我没猜错的话,你的程序名就叫keyboard.
这说明你的keyboard.exe正在运行,指上一次运行的那个.
所以它不可写入.只要把它关掉,再链接就不会有问题了!
社会栋梁 2004-03-23
  • 打赏
  • 举报
回复
恩,的确
工程中多了个模块
|External Dependencies
|--basetsd.h
smallbull 2004-03-23
  • 打赏
  • 举报
回复
这段程序可以运行!!!!!!
你应该新建一个空的“Win32 Application”,然后新建一个空的C++ Source File加到项目中,然后把这段代码拷贝到文件中即可编译运行,没问题的。
内容概要:本文介绍了SB200工业级单芯片RS232转RS422/RS485转换收发器的技术特性与优势。该器件采用QFN-40封装,具备端口供电功能,无需外接电源即可工作,支持RS422与RS485多节点组网,并实现自动方向控制,无需额外的DTR或RTS控制信号。SB200最高支持921.6 Kbps的波特率,在1.2km长距离传输下仍能稳定运行,显著优于传统低价转换器。文档还展示了SB200在不同模式下的性能表现,包括RS422、RS485回显与非回显模式,并提供与其他产品的详细对比,突出其在速率、多点通信、终端电阻配置和工业级温度范围等方面的优势。 适合人群:从事工业通信、嵌入式系统开发及相关硬件设计的研发人员,特别是对串行通信接口有应用需求的工程师;适用于有一定电子技术基础的技术支持或产品选型人员。 使用场景及目标:①用于工业现场长距离、高可靠性的串行通信部署;②替代传统需外部供电和手动方向控制的转换器,简化系统布线与维护;③应用于支持多点组网、高速数据传输的RS485/RS422网络中,提升通信效率与稳定性。 阅读建议:在阅读过程中应重点关注SB200的自动方向控制机制、端口供电能力及其在不同通信模式下的性能参数,结合实际应用场景进行器件选型评估,并参考对比表格识别其相对于低端产品的综合优势。 如需SB300数据手册与其他详细资料,欢迎随时咨询北京博控自动化技术有限公司索取。
内容概要:本文围绕基于二阶扩展卡尔曼滤波(Second-order Extended Kalman Filter, Second-order EKF)的锂电池荷电状态(State of Charge, SOC)估计方法开展系统性研究,采用Matlab平台进行建模与仿真分析,旨在提升锂电池SOC估算的精度与动态适应能力。文章深入阐述了二阶EKF相较于传统一阶EKF在处理电池非线性动态特性方面的理论优势,通过引入更高阶泰勒展开项,有效降低线性化误差,从而提高状态估计的准确性。研究构建了适用于锂电池的等效电路模型(ECM),结合实测充放电实验数据,在多种动态工况下验证了该方法在SOC估计中的有效性与鲁棒性。同时,论文系统比较了卡尔曼滤波家族中多种算法(如标准卡尔曼滤波KF、无迹卡尔曼滤波UKF、扩展卡尔曼滤波EKF、粒子滤波PF等)在电池状态估计中的性能差异,突出二阶EKF在兼顾计算效率与估计精度方面的优越性,尤其适用于强非线性电池系统的实时SOC估计任务。; 适合人群:具备控制理论、现代信号处理、非线性系统建模或电池管理系统(BMS)相关基础知识,从事新能源汽车、储能系统、电力电子与智能电网等领域研究的硕士/博士研究生、科研人员及工程技术人员。; 使用场景及目标:①在锂电池管理系统中实现高精度、高稳定性的实时SOC在线估计;②为电池健康状态(SOH)、剩余使用寿命(RUL)等关键状态参数的联合估计提供可靠的初始状态与误差协方差信息;③作为科研与工程实践的重要参考,用于复现、改进或优化现有非线性滤波算法,推动其在复杂电化学系统状态估计中的应用发展。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点剖析二阶EKF的数学推导过程、系统状态空间模型的构建方法、过程与观测噪声的合理设定,并通过与UKF、EKF等算法的仿真结果对比,深入理解其在不同工况下的适用边界与优化潜力,进而掌握非线性滤波器在工程应用中的设计要点与调参技巧。

16,550

社区成员

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

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

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