我在编写DirectX程序,拷到别的机器上运行,结果都运行不起,都是应用程序配置不正确造成的,于是再上网查看信息,找到了一条非常有用的帖子,供大家使用,文章版权归原作者。
- 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题“,这个问题很让我意外,以前只出现过缺少DLL的情况,而这次出现这个问题,让我一时没办法。想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库。于是百度一下,发现好多相关主题。我是按照这个帖子解决的:
- 在VS2005下用C++写的程序,在一台未安装VS2005的系统上,
- 用命令行方式运行,提示:
- “系统无法执行指定的程序”
- 直接双击运行,提示:
- “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”
- 以前用VC6和VS2003的话,如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。
- 自己实验了一下,感觉以下几种解决办法是可行的:
- 方法一:
- 在类似C:/ProgramFiles/MicrosoftVisualStudio8/VC/redi
- st/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT下找到了下列文件:
- msvcm80d.dll
- msvcp80d.dll
- msvcr80d.dll
- Microsoft.VC80.DebugCRT.manifest
- 把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。
- 其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!
- 方法二:
- 修改编译选项,将/MD或/MDd改为/MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
- 方法三:
- 工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
- 这样生成的exe文件应该就可以在其他机器上跑了。
- 方法四:
- 你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装
-
-
C#调用c++制作的DLL时,一些参数的赋值问题如char*,结构体
- c++dll中的原型
-
inttest(char*xm,char*fa,UINT&VerNum,doubleMile,char*SurvMile);
- c#调用时
-
[DllImport(@"Test2.DLL")]
-
publicstaticexterninttest(stringxm,stringfa,refUInt32VerNum,doubleMile,StringBuilderSurvMile);
- 注意:
-
1.调用的时候,有部分char*,如果想获得返回值,不能用string作参数来进行调用,这样得不到返回到结果,可以用StringBuilder来声明变
-
StringBuilderstrMyTemp=newStringBuilder(256);
- 2.结构体的引用传递
- 首先在c#中定义和c++相同的结构体,如果是引用传递,在结构体前面加上[In,Out]
-
[DllImport(@"test.dll")]
-
publicstaticexterninttest([In,Out]SLineData[]lndt,refUInt32length);
- 3.其他的类型如整形等等用ref加上数据变量则可获得返回值
-
- 使用C++调用C#的DLL
- SwfDotNet是C#编写的,作者的C#水平,真是令我佩服。这是个特别好的读写Swf文件的库。但是,我要用在C++项目中,怎么让C++调用C#的DLL呢。今天一上午都在琢磨这个问题,耽误了很多时间,原因是编译是出现:
- warningC4819:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防止数据丢失。
- 接着就是一大堆的0x01等等。自己做了个Sample,仔细分析发现还是自己没有搞清楚。正确的操作如下:
- 1创建C#DLL,需要指定应用类型为“类库”,代码:
-
namespaceCSLib
- {
-
publicclassClass1
- {
-
privatestringname;
-
publicstringName
- {
- get
- {
-
returnname;
- }
- set
- {
-
name="YourName:"+value;
- }
- }
- }
- }
- 2C++客户程序,是个控制台应用,代码:
-
#using"../debug/CSLib.dll"
-
usingnamespaceCSLib;
-
int_tmain(intargc,_TCHAR*argv[])
- {
- Class1^c=gcnewClass1();
-
c->Name="zzj";
-
printf("%s/n",c->Name);
-
return0;
- }
- 3几点要记住:
-
1使用#using引用C#DLL,而不是#include。我就是想当然的使用了后者,所以浪费了一上午的时间;
-
2别忘了usingnamespaceCSLib;
-
3使用C++/clr语法,采用正确的访问托管对象,即:使用帽子'^',而不是星星'*'(选择菜单[项目]->[属性],在其[属性页]中的[公共语言运行库支持]项)
- 提示dll配置失败把*.dll.embed.manifest及*.dll.intermediate.manifest(dll输入进去)
分享到:
相关推荐
解决 应用程序无法启动,因为应用程序的并行配置不正确
[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,...
解决“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题” 百试不爽! 执行顺序:先vcredist_x86.exe,再C2008sp1.exe (PS:这两个不行,再运行dxwebsetup.exe) 祝大家愉快!
exe应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具
NULL 博文链接:https://tcrct.iteye.com/blog/929484
很多用户在下载了愤怒的小鸟PC版后点击运行发现报“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这样的错误,大部分原因是由于系统中未安装相应的C++组件,导致游戏缺失运行...
NULL 博文链接:https://jiangzhengjun.iteye.com/blog/461724
NULL 博文链接:https://springrisingsun.iteye.com/blog/506278
上述资源是针对HFSS15应用程序无法正常启动的解决办法。包括HFSS16安装步骤。亲测有效。解决办法包括资源附在文档内。
java调用c++写的dll出现"由于应该程序配置不正确,应用程序未能启动"所用的资源
先vcredist_x86.exe,再C2008sp1.exe..实在不能解决再用第三个,完美解决!!
windows10无法启动应用程序提示并行配置不正确的解决方法.docx
问题描述:应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。 问题分析:使用cadence SPB 时候回遇到这种情况,无论是运行orcad capture ...
听起来好像您刚刚将应用程序复制到新计算机上。 最好的解决方案是创建一个安装程序包,然后安装应用程序-安装程序将把所需的文件复制到正确的位置。 您还没有说您正在使用哪个编译器,如果...
解决 sxstrace.exe无法启动
可是在某些情况下,不管我们编译的是debug还是release版本,在虚拟机环境中都会报“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”(The application has failed to start ...
在IIS管理器中 》应用程序池 》ASP.NET V4.0 》高级设置 》标识 》改为localSystem 不安全 2).Internet信息服务(IIS)管理器-->网站-->你的网站-->身份验证 >匿名身份验证 >应用程序池标识 > 确认
将当前说明文档的目录下的x64、x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用)。 如果是WEB网站,则复制到Bin目录下即可,发布时,也注意x64和x86一起打包发布 注意,当前的...
解决"应用程序配置不正确,程序无法启动
应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参考应用程序事件日志或使用命令行sxstrace.exe