小编Ken*_*ric的帖子

应用程序无法启动...应用程序配置不正确 - VC++ 2005运行时问题

我们将Visual C++ 2003解决方案迁移到Visual 2005,现在我们在部署到干净的XP机器时遇到了问题.

我们的解决方案有一个DLL项目和一个使用此DLL的命令行可执行文件.两个项目都创建并嵌入清单文件.

我们的安装程序还将VC8 CRT运行时从C:\ Program\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT \复制到安装目录.

当我们在干净的Windows XP上安装时,我们会看到错误消息"应用程序无法启动...应用程序配置不正确".

将exe放在Depends.exe中,说:

Error: The Side-by-Side configuration information for "c:\program files\MySoftware\vc8\BENCHMARK.EXE" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Error: The Side-by-Side configuration information for "c:\program files\MySoftware\vc8\MYLIB-VC8.DLL" contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).
Warning: At least one module …
Run Code Online (Sandbox Code Playgroud)

deployment dll visual-studio-2005

7
推荐指数
1
解决办法
5万
查看次数

构建没有CRT和默认标头的控制台应用程序?

我试图在不使用CRT的情况下构建控制台应用程序,或者在任何情况下都使用除kernel32.lib之外的任何其他导入.我得到了我的代码进行编译,但无法将链接器包装成几个问题:

unresolved external symbol @__security_check_cookie@4
unresolved external symbol "int __cdecl FreeLibrary(void *)" (?FreeLibrary@@YAHPAX@Z)
unresolved external symbol "void * __cdecl LoadLibraryW(wchar_t *)" (?LoadLibraryW@@YAPAXPA_W@Z)
unresolved external symbol "int (__cdecl*__cdecl GetProcAddress(void *,char *))(void)" (?GetProcAddress@@YAP6AHXZPAXPAD@Z)
unresolved external symbol _wmainCRTStartup
Run Code Online (Sandbox Code Playgroud)

FreeLibrary,LoadLibraryW和GetProcAddress我已经明确地引入了程序,而不是使用windows.h:

#pragma comment(lib, "kernel32.lib")

typedef int(*FARPROC)();

void* LoadLibraryW( wchar_t* lpLibFileName );
FARPROC GetProcAddress( void* hModule, char* lpProcName );
int FreeLibrary( void* hLibModule );
Run Code Online (Sandbox Code Playgroud)

我想我的原型有问题.然而,更大的问题是__security_check_cookie_wmainCRTStartup,这显然有事情做与CRT.所以我想知道如何重写int wmain(int argc, wchar_t* argv[])入口点的默认值,以及如何摆脱安全cookie.

c++ windows visual-studio-2008 visual-c++

7
推荐指数
1
解决办法
3457
查看次数

VS 2005 C++项目中的msvcr90.dll依赖项

我在VS 2005中为本机Win32 /非托管C++创建了一个DLL项目,称之为myProj.dll.这取决于第三方商业DLL,而后者依赖于msvcr90.dll(我假设它是从VS 2008项目构建的).我将其称为thirdParty.dll.

我的DLL项目在VS2005中构建得很好.我已经构建了一个链接到myProj.lib的测试应用程序(同样,VS 2005 Win32 C++).(顺便说一下,根据.lib的小尺寸来判断,并且在运行时,应用程序必须找到myProj.dll,我猜测.lib只是一个调用的包装器. loadLibrary()加载实际的DLL;是关闭吗?)

我的问题是,在运行时,测试应用程序无法找到msvcr90.dll(也不是msvcp90.dll),其依赖性来自thirdParty.dll.

我已经安装了Microsoft的redist包,所以在c:\ WINDOWS\WinSxS\x86_Microsoft.VC90.CRT _...中安装了所有std(9.0)C++库.更重要的是,如果我将依赖性walker指向thirdParty.dll,它会愉快地解析对该位置的引用.

但是,如果我将depends.exe指向我的测试应用程序(.exe)或myProj.dll,则找不到msvcr90.dll和msvcp90.dll.

我猜我需要在VS2005中配置一些东西,以便.exe或myProj.dll知道std C++库的9.0版本的位置(可能是redist包在C:\ WINDOWS\WinSxS中安装它们的位置) ),但我似乎无法弄清楚它是什么.我是在正确的轨道上吗?

我注意到,如果我只是将msvc*90.dll文件复制到我的app目录,那么依赖项就解决了,但是我得到了关于std c ++ DLL等的不正确加载的运行时错误.

非常感谢提前.

c++ dll visual-studio-2005

7
推荐指数
2
解决办法
7815
查看次数

VS2008二进制比VS2005慢3倍?

我刚刚将原生C++项目从VS2005-SP1升级到VS2008-SP1
我测试的第一件事是对应用程序的一个非常基本的功能测试,我注意到的第一件事是主数字运算算法执行速度慢三倍VS2008二进制文件.
我再次测试VS2005二进制文件,以确保没有任何其他差异,它仍然像以前一样执行.
有没有人偶然发现这个?

c++ optimization performance visual-studio-2005 visual-studio-2008

7
推荐指数
1
解决办法
803
查看次数

初学者的松散耦合和OO实践

保持类松散耦合是编写易于理解,修改和调试的代码的一个重要方面 - 我明白了.不过,作为一个新手,我几乎可以在任何时候超越最简单的例子.

我或多或少地了解如何在自己的类中封装字符串,整数和简单数据类型.当我开始处理富文本格式等信息时,事情变得非常复杂 - 除非我只使用组件中已有的各种方法.继续这个例子,假设我正在写一些包含UI中的RTF备忘录组件的东西.在Delphi中,该组件具有内置方法,可用于保存格式化文本.此外,有时看起来使用RTF文本本身的唯一(或至少是最好的)方法是通过再次内置到组件中的方法.

当我已经拥有一个为我完成所有这些操作的组件时,我将如何(或为什么)在另一个类中执行保存,加载和格式化文本的所有工作?

就我自己而言,我通常最终要么(a)做一些看起来比需要复杂得多的事情,重新发明已经存在的方法,或者(b)创建仍然紧密耦合到彼此的做得很差的类.正如他们在商业中所说的那样,"必须有更好的方法!"

我只是在概念上迷失了"更好的方式"的运作方式.有什么想法吗?

oop loose-coupling

7
推荐指数
2
解决办法
3144
查看次数

Perl类关闭

我一直在尝试在perltoot中描述的对象内部创建一个闭包.我已经完全复制了它,甚至复制和粘贴它,但我仍然能够以通常的方式访问该对象,$obj->('NAME').我正盯着失去耐心!

我是误会了什么?我多年来一直在使用perl进行个人项目,并且刚刚开始掌握课程和OOP.

package Person;

sub new {
     my $that  = shift;
     my $class = ref($that) || $that;
     my $self = {
        NAME  => undef,
        AGE   => undef,
        PEERS => [],
     };
     my $closure = sub {
        my $field = shift;
        if (@_) { $self->{$field} = shift }
        return    $self->{$field};
     };
     bless($closure, $class);
     return $closure;
}

sub name   { &{ $_[0] }("NAME",  @_[ 1 .. $#_ ] ) }
sub age    { &{ $_[0] }("AGE",   @_[ 1 …
Run Code Online (Sandbox Code Playgroud)

perl

7
推荐指数
1
解决办法
442
查看次数

我可以使用C#在Visual Studio 2005中创建透明按钮吗?

我有一个用户界面,需要在C#项目中放置一些圆形按钮,后面有一些数据.按钮是System.Windows.Forms.buttons,我使用了透明的GIF图像来创建它们.但是,透明区域不透明.我在网上寻找参考资料,但没有找到任何关于如何正确做到这一点的建议.有一些提到在Visual Studio 2008中这样做但我需要在2005年保留这个项目.任何帮助或建议都表示赞赏.

user-interface visual-studio-2005 button transparent visual-studio

6
推荐指数
1
解决办法
2万
查看次数

如何在VS2005(VB.Net)中禁止特定功能的编译器警告

我有一个继承自基类的类,并实现以下...

    Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
Run Code Online (Sandbox Code Playgroud)

现在它继承的基类也实现了这个System.IComparable.CompareTo所以我得到以下编译器警告:

警告:'System.IComparable.CompareTo'已由基类实现.重新实现假定的功能.

我很好,所以我的问题是我怎么能只为这个功能压制这个警告(即不是所有这些警告).

澄清:

  • 这是MSDN上的错误的链接.
  • 我已经尝试了Shadows和Overrides,但都没有消除警告.
  • 警告不在方法本身上(除非省略Shadows或Overrides),而是专门用于"Implements System.IComparable.CompareTo".
  • 我不打算压制这种类型的所有警告(如果它们突然出现),只是这一个.

解决方案:
我希望使用System.Diagnostics.CodeAnalysis.SuppressMessage属性或类似C#的#pragma,但看起来没有办法抑制单行警告.有一种方法可以为此项目关闭此消息,但不会关闭所有警告.

我手动编辑了.vbproj文件,并在节点中包含42015用于调试和发布编译.不理想但比总是在IDE中看到警告更好.

如果有人有更好的解决方案,请添加它,我很乐意尝试标记答案.

vb.net compiler-construction visual-studio-2005

6
推荐指数
1
解决办法
4882
查看次数

从VS2008发布的等效msbuild命令

任何想法是什么命令在msbuild中发布与VS2008中的命令相对应的命令?我想要的是结果输出是相同的,没有_PublishedWebSites子目录.这可以从命令行实现,还是我应该使用构建文件?

谢谢.

asp.net msbuild visual-studio-2008

6
推荐指数
2
解决办法
4809
查看次数

NOT处于调试模式时,单元测试无法运行

我刚刚将公共业务层项目从主分支分支到新分支,并将它们包含在新的解决方案中.一切都编译但是当我运行单元测试时,每次测试都会出现以下错误...

单元测试适配器引发异常:无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.

奇怪的是,当我调试它们时它们运行正常.只有在没有附加调试器的情况下运行它们时才会发生错误.

如果没有彻底修复,有人能告诉我如何"检索LoaderExceptions属性"吗?

unit-testing visual-studio-2008

6
推荐指数
2
解决办法
3144
查看次数