(转)[VS2005]解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠

原文章出处:http://www.cnblogs.com/lne818/archive/2008/11/07/1328845.html

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

我也是遇到了这样的情况,自己在编写老师布置的课程设计的时候,将自己的程序拷贝在别人的机器上就遇到了这个问题。后面看了这篇文章,收益很多,以后我也会这么修改错误了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
[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、付费专栏及课程。

余额充值