(转)[VS2005]解决“由于应用程序的配置不正确,应用程序未启动

我在编写DirectX程序,拷到别的机器上运行,结果都运行不起,都是应用程序配置不正确造成的,于是再上网查看信息,找到了一条非常有用的帖子,供大家使用,文章版权归原作者。

Code:
  1. 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题“,这个问题很让我意外,以前只出现过缺少DLL的情况,而这次出现这个问题,让我一时没办法。想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库。于是百度一下,发现好多相关主题。我是按照这个帖子解决的:   
  2.   在VS2005下用C++写的程序,在一台未安装VS2005的系统上,   
  3. 用命令行方式运行,提示:   
  4. “系统无法执行指定的程序”   
  5. 直接双击运行,提示:   
  6. “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”   
  7.   
  8. 以前用VC6和VS2003的话, 如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。   
  9.   
  10. 自己实验了一下,感觉以下几种解决办法是可行的:   
  11. 方法一:   
  12. 在类似C:/Program Files/Microsoft Visual Studio 8/VC/redi   
  13. st/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT 下找到了下列文件:   
  14.   
  15. msvcm80d.dll   
  16. msvcp80d.dll   
  17. msvcr80d.dll   
  18. Microsoft.VC80.DebugCRT.manifest   
  19.   
  20. 把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。   
  21.   
  22. 其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!   
  23.   
  24. 方法二:   
  25. 修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。   
  26.   
  27. 方法三:   
  28.   
  29. 工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”   
  30. 这样生成的exe文件应该就可以在其他机器上跑了。   
  31.   
  32. 方法四:   
  33.   
  34. 你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装   
  35.   
  36.     
  37.   
  38. C#调用c++制作的DLL时,一些参数的赋值问题如char *,结构体   
  39.   
  40. c++ dll中的原型   
  41. int test(char* xm,char* fa,UINT &VerNum,double Mile,char *SurvMile);   
  42. c#调用时   
  43.  [DllImport(@"Test2.DLL")]   
  44. public static extern int test(string xm,string fa,ref UInt32 VerNum,double Mile, StringBuilder SurvMile);   
  45.   
  46.   
  47.  注意:   
  48. 1.调用的时候,有部分char* ,如果想获得返回值,不能用string 作参数来进行调用,这样得不到返回到结果,可以用StringBuilder来声明变    
  49.  StringBuilder   strMyTemp  =   new   StringBuilder(256);//256是长度   
  50. 2.结构体的引用传递   
  51.   首先在c#中定义和c++相同的结构体,如果是引用传递,在结构体前面加上[In, Out]   
  52.      [DllImport(@"test.dll")]   
  53.      public static extern int test([In, Out] SLineData[] lndt,ref UInt32 length);   
  54. 3.其他的类型如整形等等用ref加上数据变量则可获得返回值   
  55.   
  56.   
  57.     
  58.   
  59. 使用C++调用C#的DLL   
  60.   
  61. SwfDotNet是C#编写的,作者的C#水平,真是令我佩服。这是个特别好的读写Swf文件的库。但是,我要用在C++项目中,怎么让C++调用C#的DLL呢。今天一上午都在琢磨这个问题,耽误了很多时间,原因是编译是出现:   
  62. warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。   
  63. 接着就是一大堆的0x01等等。自己做了个Sample,仔细分析发现还是自己没有搞清楚。正确的操作如下:   
  64. 1 创建C# DLL,需要指定应用类型为“类库”,代码:   
  65. namespace CSLib   
  66. {   
  67.     public class Class1   
  68.     {   
  69.         private string name;   
  70.   
  71.         public string Name   
  72.         {   
  73.             get   
  74.             {   
  75.                 return name;   
  76.             }   
  77.             set   
  78.             {   
  79.                 name = "Your Name: " + value;   
  80.             }   
  81.         }   
  82.     }   
  83. }   
  84.   
  85. 2 C++客户程序,是个控制台应用,代码:   
  86. #using "../debug/CSLib.dll"   
  87. using namespace CSLib;   
  88.   
  89. int _tmain(int argc, _TCHAR* argv[])   
  90. {   
  91.  Class1 ^c = gcnew Class1();   
  92.   
  93.  c->Name = "zzj";   
  94.   
  95.  printf("%s/n", c->Name);   
  96.   
  97.  return 0;   
  98. }   
  99.   
  100. 3 几点要记住:   
  101.  1 使用#using引用C# DLL,而不是#include。我就是想当然的使用了后者,所以浪费了一上午的时间;   
  102.  2 别忘了using namespace CSLib;   
  103.  3 使用C++/clr语法,采用正确的访问托管对象,即:使用帽子'^',而不是星星'*'(选择菜单[项目]->[属性],在其[属性页]中的[公共语言运行库支持]项)   
  104.   
  105. 提示dll配置失败  把*.dll.embed.manifest及*.dll.intermediate.manifest(dll输入进去)   

 

[VS2005]解决“由于应用程序配置正确应用程序启动,重新安装应用程序可能会纠正这个问题” 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了“由于应用程序配置正确应用程序启动,重新安装应用程序可能会纠正这个问题“,这个问题很让我意外,以前只出现过缺少DLL的情况,而这次出现这个问题,让我一时没办法。想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库。于是百度一下,发现好多相关主题。我是按照这个帖子解决的: 在VS2005下用C++写的程序,在一台安装VS2005的系统上, 用命令行方式运行,提示: “系统无法执行指定的程序” 直接双击运行,提示: “由于应用程序配置正确应用程序启动,重新安装应用程序可能会纠正这个问题” 以前用VC6和VS2003的话, 如果缺少库文件,是会提示缺少“**.dll”,但是用VS2005却没有这样的提示。 自己实验了一下,感觉以下几种解决办法是可行的: 方法一: 在类似C:\Program Files\Microsoft Visual Studio 8\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和你的程序捆绑安装
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值