炫舞游戏中出现:加载失败,加载路径 C:inject.dll。有大佬知道怎么处理吗,万般感谢!

炫舞游戏中出现:加载失败,加载路径 C:inject.dll。有大佬知道怎么处理吗,万般感谢!,第1张

这种情况可能是由于游戏文件损坏或者系统文件错误导致的。以下是几种可能的解决方案:

重新安装游戏:如果游戏文件损坏或缺失,可以尝试重新安装游戏。首先需要卸载原有游戏,然后重新下载游戏并安装。这将覆盖原有游戏文件,可能解决加载失败和卡顿的问题。

检查游戏文件:在重新安装游戏之前,可以尝试检查游戏文件是否完整和正确。可以使用游戏的修复功能或者第三方修复工具,检查游戏文件的完整性和错误。如果发现有错误,可以尝试修复游戏文件。

检查系统文件:游戏的运行还需要一些系统文件的支持,如果这些文件出现错误或缺失,可能会导致游戏加载失败或者卡顿。可以使用系统自带的文件检查工具,如sfc /scannow命令来检查系统文件,并修复错误。

检查驱动程序:游戏的运行还需要正确的驱动程序支持,如显卡驱动程序等。可以使用设备管理器检查是否有设备驱动程序错误或者缺失,然后更新或重新安装相应的驱动程序。

清理系统垃圾:系统中的垃圾文件和临时文件可能会占用系统资源,导致游戏卡顿或者加载失败。可以使用系统清理工具或者第三方清理工具清理系统中的垃圾文件和临时文件。

如果以上方法都无法解决问题,可以考虑咨询游戏客服或者找相关专业人员进行处理。

可以通过两种方式

1隐式链接(需要dll,lib,h)

2显式链接(需要dll,h)

方法1:隐式链接----需要lib,dll,h文件

隐式链接就是在程序开始执行时就将DLL文件加载到内存当中,而显示链接,是实时加载,程序需要的时候加载,不需要的时候,卸载。

这种方式需要DLL文件,以及相应的Lib文件和头文件。

只要没有在程序中显式链接的,都是隐式链接

Windows程序bin目录包含了可执行文件(exe)和动态链接库(dlll),lib目录包含了静态库。

步骤

第一步:将dll,lib,h文件放入对应的搜索路径

●其中动态库的搜索路径点击这里查看,记住最重要的两个

1、项目当前目录(cpp)目录

2、path环境变量中的目录

●静态库的搜索路径包括

1、项目当前目录cpp目录(项目和解决方案的Debug不行)(也不是解决方案目录)

2、VC设置中的库目录(Library Directories)

注:如果lib库不放到搜索路径中,也可以在程序中添加

#pragmacomment(lib,"D:/DLLTestlib")//若是相对路径,则为项目当前cpp目录

●头文件搜索路径包括

1、VC设置中的包含目录(Include Directories)

第二步:一定要在VC设置中的依赖项中添加你用到的库的名字

第一种(对应上面每种搜索路径1):针对数量较少的库

设置dll,lib搜索路径:直接将dll,lib,h放入项目当前目录下(即含有项目源文件cpp的目录)

设置h的搜索路径:VC设置中的包含目录(Include Directories)加入你的h路径

然后在链接->输入->附加依赖项中加入你要使用的静态库。

这里只添加静态库

就可以使用DLL中的函数了。

第二种(对应上面每种搜索路径2):针对数量比较多的库(Opencv)

如Opencv,OSG等开源库的配置

这种方式也是通常开源库的配置方式,如Opencv,OSG等

步骤如下

步骤1 添加DLL的目录

方法1:★将dll目录(通常为bin目录)放入环境变量Path中(需要重启),path是搜索动态库的目录

步骤2添加静态库lib库目录和头文件的目录

在工程中的VC++目录中添加静态库目录和头文件目录。

步骤3添加静态库

在链接->输入->附加依赖项中加入你要使用的静态库(当程序中调用时,会在上述配置的库目录中寻找这个库)。

这里只添加静态库,动态库的目录已放入环境变量中,系统会搜索这个路径的,自动加载dll

如RmwRoadBoundaryStraightLineDLLlib

然后,在程序中添加头文件 (在上述配置的头文件目录中寻找),就可以使用DLL中的函数了。

方法2:显式链接---需要DLL(不需要lib,h文件)

就是显式加载DLL库

注意:显示链接,导出DLL的时候,采用extern “C”的方式,而不采用_declspec(dllexport),因为 _declspec(dllexport)会有一个”名字改编”的问题(采用了_cdecl调用规约的C++编译方式)。

示例:

如库文件对应的头文件如下

#ifndef DLLTEST_H

#defineDLLTEST_H

//该宏完成在dll项目内部使用__declspec(dllexport)导出

//在dll项目外部使用时,用__declspec(dllimport)导入

//宏DLL_EXPORTS在cpp中定义

#ifdefDLL_EXPORTS

#defineDLL_EXPORTS  extern"C"_declspec(dllexport)

#else

#define DLL_EXPORTS extern"C"_declspec(dllimport)

#endif

//函数声明

DLL_EXPORTSint  Add(int a, int b);

DLL_EXPORTSint  Sub(int a, int b);

DLL_EXPORTSint  Divide(int a, int b);

#endif//DLLTEST_H

测试代码:

typedefint(Add)(int a, int b);

typedefint(Sub)(int a, int b);

HINSTANCE hDLL;

Add Add_;//函数指针

hDLL = LoadLibrary(_T("D:/DLLTestdll"));//加载动态链接库DLLTestdll文件;

Add_ = (Add)GetProcAddress(hDLL,"Add");

intresult = Add_(5, 8);

printf("5+8:%d\n",result);

FreeLibrary(hDLL);//卸载dll文件;

以下是采用__declspec(dllexport)方式导出,不推荐这种方式需要注意函数名的书写问题!

现在DLLTesth中有函数(采用__declspec(dllexport)方式导出)

#ifndef DLLTEST_H

#defineDLLTEST_H

//该宏完成在dll项目内部使用__declspec(dllexport)导出

//在dll项目外部使用时,用__declspec(dllimport)导入

//宏DLL_EXPORTS在cpp中定义

#ifdefDLL_EXPORTS

#defineDLL_EXPORTS  __declspec(dllexport)

#else

#define DLL_EXPORTS __declspec(dllimport)

#endif

intDLL_EXPORTS Add(int a, int b);

intDLL_EXPORTS Sub(int a, int b);

intDLL_EXPORTS Divide(int a, int b);

#endif//DLLTEST_H

测试代码

typedefint(Add)(int a, int b);

typedefint(Sub)(int a, int b);

HINSTANCE hDLL;

Add Add_;//函数指针

//也可以采用hDLL =LoadLibrary(_T("D:/DLLTestdll"));

hDLL =LoadLibraryA(("D:/DLLTestdll"));//加载动态链接库DLLTestdll文件;

Add_ = (Add)GetProcAddress(hDLL,"Add@@YAHHH@Z");//!!!!获取函数地址

intresult = Add_(5, 8);

printf("5+8:%d\n",result);

FreeLibrary(hDLL);//卸载dll文件;

这里需要注意的是:GetProcAddress(hDLL,"函数名");中的函数名要是DLL中的函数名,这个函数名可以用PE Explorer软件查看

由于采用的是VC++处理函数名方式,所以

GetProcAddress(hDLL,"Add@@YAHHH@Z");// GetProcAddress(hDLL,"函数名");

而不是简单的“Add”,因为DLL中的函数名是结果VC++方式处理过的函数名

显示调用,最好采用extern “C”的方式导出DLL

所以采用隐式链接方式的时候,只加载需要的DLL,在附加依赖项中,只添加需要的DLL对于的lib,不要多加,否则会造成1加大程序启动时间 2内存浪费

给你的library定义一个带"IMPORTED" 属性的target,同时需要并为此定义lib和dll路径属性,需要区分debug和release。

链接此库用上面定义target的名字即可,这样会自动隐藏背后的不同版本的lib库文件。

在CMakeListstxt定义一个定制的build step来自动拷贝运行所需的dll文件:

通常,当你的项目集成了很多第三方库,以上这么干会把CMakeListstxt搞得很复杂,因此推荐得方式还是得写FindXXXcmake, 并在FindXXXcmake里创建对应的target,关于如何写可以参考 这篇文章 。

有些第三方库提供已编译好的库文件且是多个,这时候上面的target不再能拷贝dll,而且会报错unknwon target,对于这种第三方库的target得如下定义:

拷贝DLL文件的command得改成如下方式:

其实,Qt打包时候拷贝DLL也是同样这个做法:

相应DLL文件缺失或未注册的问题,以websiteapi32dll为例,修复步骤如下:

1、首先,在一定途径获取websiteapi32dll文件,例如搜索引擎查询并下载。

2、将websiteapi32dll文件复制到“C:\Windows\System32”这个目录下。

3、点击“开始菜单”,选择“运行”按钮,输入:regsvr32 websiteapi32dll,点击确定。

4、此时d出安装完成websiteapi32dll文件的提示,点击确定。

以上就是关于炫舞游戏中出现:加载失败,加载路径 C:/inject.dll。有大佬知道怎么处理吗,万般感谢!全部的内容,包括:炫舞游戏中出现:加载失败,加载路径 C:/inject.dll。有大佬知道怎么处理吗,万般感谢!、如何加载动态库dll、如何通过cmake自动拷贝运行所需dll到executable目录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10062343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存