我们将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) 我试图在不使用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.
我在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++项目从VS2005-SP1升级到VS2008-SP1
我测试的第一件事是对应用程序的一个非常基本的功能测试,我注意到的第一件事是主数字运算算法执行速度慢三倍VS2008二进制文件.
我再次测试VS2005二进制文件,以确保没有任何其他差异,它仍然像以前一样执行.
有没有人偶然发现这个?
c++ optimization performance visual-studio-2005 visual-studio-2008
保持类松散耦合是编写易于理解,修改和调试的代码的一个重要方面 - 我明白了.不过,作为一个新手,我几乎可以在任何时候超越最简单的例子.
我或多或少地了解如何在自己的类中封装字符串,整数和简单数据类型.当我开始处理富文本格式等信息时,事情变得非常复杂 - 除非我只使用组件中已有的各种方法.继续这个例子,假设我正在写一些包含UI中的RTF备忘录组件的东西.在Delphi中,该组件具有内置方法,可用于保存格式化文本.此外,有时看起来使用RTF文本本身的唯一(或至少是最好的)方法是通过再次内置到组件中的方法.
当我已经拥有一个为我完成所有这些操作的组件时,我将如何(或为什么)在另一个类中执行保存,加载和格式化文本的所有工作?
就我自己而言,我通常最终要么(a)做一些看起来比需要复杂得多的事情,重新发明已经存在的方法,或者(b)创建仍然紧密耦合到彼此的做得很差的类.正如他们在商业中所说的那样,"必须有更好的方法!"
我只是在概念上迷失了"更好的方式"的运作方式.有什么想法吗?
我一直在尝试在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) 我有一个用户界面,需要在C#项目中放置一些圆形按钮,后面有一些数据.按钮是System.Windows.Forms.buttons,我使用了透明的GIF图像来创建它们.但是,透明区域不透明.我在网上寻找参考资料,但没有找到任何关于如何正确做到这一点的建议.有一些提到在Visual Studio 2008中这样做但我需要在2005年保留这个项目.任何帮助或建议都表示赞赏.
user-interface visual-studio-2005 button transparent visual-studio
我有一个继承自基类的类,并实现以下...
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'已由基类实现.重新实现假定的功能.
我很好,所以我的问题是我怎么能只为这个功能压制这个警告(即不是所有这些警告).
澄清:
解决方案:
我希望使用System.Diagnostics.CodeAnalysis.SuppressMessage属性或类似C#的#pragma,但看起来没有办法抑制单行警告.有一种方法可以为此项目关闭此消息,但不会关闭所有警告.
我手动编辑了.vbproj文件,并在节点中包含42015用于调试和发布编译.不理想但比总是在IDE中看到警告更好.
如果有人有更好的解决方案,请添加它,我很乐意尝试标记答案.
任何想法是什么命令在msbuild中发布与VS2008中的命令相对应的命令?我想要的是结果输出是相同的,没有_PublishedWebSites子目录.这可以从命令行实现,还是我应该使用构建文件?
谢谢.
我刚刚将公共业务层项目从主分支分支到新分支,并将它们包含在新的解决方案中.一切都编译但是当我运行单元测试时,每次测试都会出现以下错误...
单元测试适配器引发异常:无法加载一个或多个请求的类型.检索LoaderExceptions属性以获取更多信息.
奇怪的是,当我调试它们时它们运行正常.只有在没有附加调试器的情况下运行它们时才会发生错误.
如果没有彻底修复,有人能告诉我如何"检索LoaderExceptions属性"吗?
c++ ×3
dll ×2
asp.net ×1
button ×1
deployment ×1
msbuild ×1
oop ×1
optimization ×1
performance ×1
perl ×1
transparent ×1
unit-testing ×1
vb.net ×1
visual-c++ ×1
windows ×1