ntdlldll是XP系统的核心dll文件,遇到此类问题是该文件损坏或者丢失,一般是病毒或者恶意软件导致。您不用担心,用下面的方法应该可以\x0d\\x0d\一、把ntdlldll下载到本机。\x0d\二、直接拷贝该文件到系统目录里:\x0d\ 1、Windows 95/98/Me系统,将ntdlldll复制到C:Windows/System目录下。\x0d\ 2、Windows NT/2000系统,将ntdlldll复制到C:WINNT/System32目录下。\x0d\ 3、Windows XP/WIN7系统,将ntdlldll复制到C:Windows/System32目录下。\x0d\三、然后打开"开始-运行-输入regsvr32 ntdlldll",回车即可解决错误提示!\x0d\\x0d\希望可以帮到您!
第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和:
LIBEXPORT_API int mySum(int a,int b){ return a+b;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,CallingConvention=CallingConventionStdCall)]
public static extern int mySum (int a,int b);
}
在C#中调用测试:
int iSum = RefCommmySum(,);
运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。
第二步,我定义了字符串 *** 作的函数(简单起见,还是采用前面的函数名),返回结果为字符串:
LIBEXPORT_API char mySum(char a,char b){sprintf(b,"%s",a); return a;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,
CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefCommmySum("45", strDest);
运行查看结果 strTmp 为"45",但是strDest为空。我修改动态链接库实现,返回结果为串b:
LIBEXPORT_API char mySum(char a,char b){sprintf(b,"%s",a) return b;}
修改 C# 导入定义,将串b修改为ref方式:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAuto,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefCommmySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均不对,含不可见字符。再修改 C# 导入定义,将CharSet从Auto修改为Ansi:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefComm mySum("45", ref strDest);
运行查看结果 strTmp 为"45",但是串 strDest 没有赋值。第二步实现函数返回串,但是在函数出口参数中没能进行输出。再次修改 C# 导入定义,将串b修改为引用(ref):
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
运行时调用失败,不能继续执行。
第三步,修改动态链接库实现,将b修改为双重指针:
LIBEXPORT_API char mySum(char a,char b){sprintf((b),"%s",a); return b;}
C#导入定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefComm mySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均为"45",调用正确。第三步实现了函数出口参数正确输出结果。
第四步,修改动态链接库实现,实现整数参数的输出:
LIBEXPORT_API int mySum(int a,int b,int c){ c=a+b; return c;}
C#导入的定义:
public class RefComm
{
[DllImport("LibEncryptdll",
EntryPoint=" mySum ",
CharSet=CharSetAnsi,CallingConvention=CallingConventionStdCall)]
public static extern int mySum (int a, int b,ref int c);
}
在C#中调用测试:
int c=0;
int iSum= RefComm mySum(,, ref c);
运行查看结果iSum 和c均为5,调用正确。
经过以上几个步骤的试验,基本掌握了如何定义动态库函数以及如何在 C# 定义导入,有此基础,很快我实现了变长加密函数在 C# 中的调用,至此目标实现。
三、结论
在 C# 中调用 C++ 编写的动态链接库函数,如果需要出口参数输出,则需要使用指针,对于字符串,则需要使用双重指针,对于 C# 的导入定义,则需要使用引用(ref)定义。
对于函数返回值,C# 导入定义和 C++ 动态库函数声明定义需要保持一致,否则会出现函数调用失败。定义导入时,一定注意 CharSet 和 CallingConvention 参数,否则导致调用失败或结果异常。运行时,动态链接库放在 C# 程序的目录下即可,我这里是一个 C# 的动态链接库,两个动态链接库就在同一个目录下运行。
已修正如下
Verify that the file exists and that you can access it
请核实文件存在并且可以使用!
说明你没有彻底卸载
DMI是英文单词Desktop Management Interface的缩写,也就是桌面管理界面,它含有关于系统硬件的配置信息。计算机每次启动时都对DMI数据进行校验,如果该数据出错或硬件有所变动,就会对机器进行检测,并把测试的数据写入BIOS芯片保存。所以如果我们在BIOS设置中禁止了BIOS芯片的刷新功能或者在主板使用跳线禁止了BIOS芯片的刷新功能,那这台机器的DMI数据将不能被更新。如果你更换了硬件配置,那么在进行WINDOWS系统时,机器仍旧按老系统的配置进行工作。这样就不能充分发挥新添加硬件的性能,有时还会出现这样或那样的故障。
如果我们在启动计算机时看到上述这个信息后,系统长时间停止不前或处于死机状态,对于机器此类故障一般很难处理。因为不能像进入系统后出现的故障,我们可以检查系统日志之类的文件进行分析。不过,根据PC机启动的过程原理分析,出现这条信息时一般有以下的可能情况:
1硬件改变
当主机的硬件配置有所变化,但是我们使用的是POST功能时,此时系统不能识别新添加的硬件,将会按老的配置进行工作,此时就会出现开机后能够加电,但是没有正常启动时“嘀”的一声,同时显示器也没有图像显示,只有风扇转动的声音。
还有一个原因是新添加的硬件的兼容性不好,导致上述的情况出现。
2BIOS设置改变
当BIOS设置错误时,比如内存的读写参数设置有误,硬盘的模式设置有误,板载声卡与集成声卡的设置有误等情况,都会造成不能正常启动。
3硬盘线连接错误
这类情况有硬盘的数据线接触不良,数据线质量低劣造成数据数输时错误太多,数据线插接有误(接主板端与接硬盘端倒个儿),主从硬盘跳线有误,硬盘容量或模式设置有误等。
4硬盘主引导区内容被破坏
当硬盘的主引导区内容被其他程序改写或被病毒破坏掉,也可能时硬盘分区表被清除或人为的设置成逻辑锁状态时,就会到此时死机。
对于硬盘的主引导区的引导程序被破坏,我们可以使用Fdisk/MBR命令进行修复,或者使用KV3000的磁盘编辑功能查找0道0面的其他62个扇区是否有备份的主引导区程序,将其还原至0道0面0区即可。
对于分区表被破坏的就比较麻烦。如果只是分区表没有“80”标志或者多个“80”标志,或者没有”55AA”标志的,我们只要使用KV3000的磁盘编辑功能进行手动修复就可以了。如果是逻辑锁,就需要制作特殊的磁盘进行解锁。如果分区表被完全破坏或者被加密,那我们就只能重新分区了。
5硬盘有故障
现在硬盘的容量越来越大,速度越来越快,不过硬盘的质量好像也越来越差了。到目前市场上还有94,95年份生产的几百M的二手硬盘在卖呢。可现在呢,刚买的新硬盘,没几天就会坏道成片或者莫名妙的丢失数据,再不就是“咣咣”的提意见罢工不干了。当硬盘硬件出现故障时,也会出现上述的情况,此类问题硬盘在CMOS里能够认到硬盘,认盘很顺利,但就是进不了系统,无法正常分区和格式化。
6主板有问题
与主板有关的也主要是主板的硬盘控制器的问题,造成数据传输不稳定,错误率太高。
超频造成的损坏
如果我们超频过头时,也会出现开机后到硬盘这儿就死机。这时我们最好住开机自检时显示的CPU的频率是多少,再打开机箱检查实际CPU的频率是多少,二者是否相同。特别对于PIV以后的CPU,其集成度极高,如果我们超频使用,极有可能造成CPU内部的电子在短时间内过度衰减,导致CPU短时间内报废。
解决的方法:
1恢复硬件改变前的状态,检查系统是否能够正常启动。
2检查所有连接线或扩展卡是否正确连接。
3试着重新配置在BIOS中“PNP/PCI configuration”“Reset Configuration Data”也可以使用“Force Update ESCD”之类的BIOS选项设置为“Enabled”,然后存盘退出。如果能够不能启动,再试着设置为“Disabled”试一试。
4查阅主板手册关于CMOS跳线的的信息并清除CMOS。请注意:在清除CMOS设置时必须拔掉主机电源线或者把主机电源的开关设置为off或0。
5断开硬盘连接线,包括光驱或其他IDE设备,再进入BIOS设置选择启动顺序为软盘启动后按F10存储退出,然后在软驱中放入一张可启动的系统盘,检查系统是否能够正常启动。
6在完成清除CMOS设置后,把CMOS设置中的“PNP/PCI configuration”选项设置为“Enabled”,再次重新启动电脑来更新设置DMI数据,也叫做强制更新ESCD数据。
7如果主机能够通过软盘启动,但是不能通过硬盘启动,这种情况有可能是硬盘的主引导区的数据被破坏,这时可以通过分区软件来修复主引导区的程序代码,如用软盘启动电脑后,使用FDISK/MBR命令来修复主引导区。也可以到相应硬盘生产商的网站下载特殊的硬盘分析工具程序,来检查自己的硬盘的具体故障。
8如果经过上述设置后还不能排除故障,这时应考虑是主板或硬盘的IDE接口的问题,可以通过替换法解决。
尊敬的联想用户,您好!
很抱歉,由于自行刷机存在一定的风险。根据描述,刷机失败若因刷了第三方固件,或是刷机步骤错误导致的。想自助刷VIBE UI系统使用,并愿意承担可能的风险,个人建议您可以到VIBE UI官网下载您设备的固件 *** 作:
>
教程:>
若无法自行有效解决,我们建议您可以抽空到当地的联想售后服务中心,让工程师帮忙检测查看一下。联想授权维修站点查询:>
感谢您对联想的支持,祝您生活愉快!
以上就是关于无法定位程序输入点csrverifyregion于动态链接库ntdll.dll上,怎么解决全部的内容,包括:无法定位程序输入点csrverifyregion于动态链接库ntdll.dll上,怎么解决、如何取消程序输入点DO_AppVerifyFileStamp于动态链接库GDCA_API.dll、安装程序出现这个:Verify that the file exests and that you can access it等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)