VC++.NET 2005 几个比较难缠的问题及其解决方法

VirtualDesktop提示Oculus servers unreachable 为什么最近更新了VD呢,是因为VD在国内使用存在一个问题,就是每次启动需要等待大约90秒的样子才能够连接电脑,而据同好说,这个问题在新版本中解决了,于是我更新了VD到最新版,反正自己购买的正版,能通过更新解决这个问题再好不过了。尤其是你更新了VD之后,更新后第一次启动需要科学验证,实测当前最新版需要验证,而以前的版本我记得是不用验证的,直接安装就可以打开使用了。 阅读详情
问题一:HWND和System::Inptr32的转换
如果你用惯了VB.NET,你一定会认为窗体的Handle属性就等同于API里面要的那个HWND——的确,MSDN里面就是这么说的,而且,在VB.NET里你可以这样写ShowWindow(Me.Handle,SW_SHOW),这一切看上去没有错误,而且字面意思上是如此理所当然。但是,进入了CLR C++的环境,ShowWindow(this->Handle,SW_SHOW)的直接结果就是编译器扔给你一句编译错误:类型不匹配,无法将System::Inptr32转换为HWND。
 
事实很明显,Handle并不如MSDN里面说的那样就是HWND,VB.NET在把Handle传进API的时候进行了类型转换,如果你有把VB.NET程序移植到CLR C++或者在CLR C++里面使用用VB.NET的程序集的经验,就会对这些深有体会。CLR C++最大的问题在于,它对绝大部分的.NET数据类型都要求用户显式地转换,而着对于.NET Framework来说没有类型自动转换显然是非常痛苦的。
我们再说回这个Handle,可能有人会这样说,我这样写可不可以呢?
ShowWindow(HWND(this->Handle),SW_SHOW);
于是编译器再次给了你脸色看,还是那个错误。
 
接着就有人发现,Handle还有一个方法 ToPointer,这次看上去问题肯定能解决了,不是么?Pointer就是指针,HWND不也是一个指针吗?于是,又有人提议:
ShowWindow(this->Handl.ToPointer(),SW_SHOW);
意思上是完美了,但是,非常遗憾,编译器说:我只认类型,不看意思,于是又报了一个错误出来。
 
做到这里,看上去已经是山穷水尽了。其实失败和成功只有一步之遥:HWND和void*是可以互相转换的!我们只要再继续多写一步:
ShowWindow(HWND(this->Handle.ToPointer()),SW_SHOW);
问题就可以解决。
接下来是第二个问题,还是这个ShowWindow。并不是所有场合我们都喜欢使用这样的语句:
This->Show();
有时候,我们得使用ShowWindow来达到某些显示的效果。当我们兴高采烈地庆祝我们解决了Handle的转换时,我们会惊讶地发现,ShowWindow显示出来的窗口什么也没有!上面的控件都不见了!
当我看到这个现象的时候,我脑袋里立刻想起一个东西:Borland C++ Builder。
是的,这个现象与Borland C++ Builder里的窗口显示特性简直一模一样!据说.NET Framework总的设计师就是那个大名鼎鼎的从Borland跑到Microsoft的安德森,果然有风格(可惜的就是MFC却没学到VCL的方便,倒是.NET学了这个见鬼的特性)。怎么办呢?细心的人会发现,当我们对窗口执行 this->Show();的时候,显示出来的窗口是无焦点的,也就是说,我们不再需要ShowWindow这个API了(因为这个API一般都是用来显示无焦点的窗体)。我们只要在Show()执行之后设置窗口的WindowState,例如:
Msgform->WindowState =System::Windows::Forms::FormWindowState::Normal ;
。
 
问题三:打包安装。
程序写完了,以为终于可以松口气了。把程序和.NET Framework安装包拿到别人那里一安装,居然发觉弹出个错误对话框:程序配置不正确。
这是典型的缺少运行时错误。于是就奇怪,MSDN不是说.NET程序可以XCopy部署的么?只要有.NET Framework ,就只要拷贝程序到目标机器上面就可以运行的啊??!!
的确,对于vb和C#的程序,xcopy部署不会存在任何问题,因为这两门语言都是给.NET量身订做的。但是C++不是。结果回去查看了vb.net程序和clr c++程序引用的dll,发现托管的C++程序比vb.net程序多引用两个dll:
                 MSVCR80D.dll
                 MSVCM80D.dll
然后我用reflector反编译我的程序,发现程序配置头xml文件里面有如下内容:
 
 
 
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
 <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
 </dependency>
</assembly>
 
注意Microsoft.VC80.DebugCRT(当你编译程序使用Debug模式就会产生)!
刚刚说的那两个dll就是Microsoft.VC80.DebugCRT的部件,现在你知道少了什么了吧?
于是我们必须把Microsoft.VC80.DebugCRT组件一起安装到目标机器上面。但是Microsoft.VC80.DebugCRT上哪找呢?
我们新建一个安装部署项目,然后添加合并模块,你会看到打开的默认文件夹里面有这个文件:
 
 
           policy_8_0_microsoft_vc80_debugcrt_x86.msm
 
猜都猜到这是什么了吧?添加进去!
当然,如果你编译使用的是Release模式,你可能依然需要安装VC++.NET 的一个可再发行包组件。
VC++ 2005运行库安装失败全解析:从原理到实战解决CAD/SolidWorks依赖问题 在Windows系统部署工业设计软件或专业工具时,系统运行库的兼容性问题是常见的安装障碍。动态链接库(DLL)作为Windows应用程序的核心依赖组件,其运行时环境(如Microsoft Visual C++ Redistributable)的完整性直接决定了软件能否正常启动。当现代操作系统的安全机制(如用户账户控制UAC)与早期运行库的安装逻辑发生冲突时,便会导致权限不足、路径解析错误或文件残留冲突。从技术价值看,理解运行库的部署原理不仅能解决Autodesk CAD、SolidWorks等专业软件的安装 阅读详情

相关推荐

MySQL 8.0.24与SQL Server 2008 R2安装常见问题解决方案

在Windows操作系统中同时部署MySQL 8.0.24与SQL Server 2008 R2,是企业环境中常见的技术需求,但也伴随着复杂的依赖管理挑战。这两个数据库系统分别依赖于不同版本的Microsoft Visual C++ Redistributable运行时库。尤其在安装或启动过程中,用户经常遇到“vcruntime140_1.dll文件缺失。

weixin_35794316的博客 1385

Windows7安装VC2015-2019_redist.x64提示“设置失败0xc8000222-未指定的错误”

首先查看日志文件看看是哪个错误 打开系统服务查看是 查看具体是哪个插件没有正确安装 一般是Windows6.1-KB2999226-x64这个补丁没有正确安装 在Windows官网下载这个补丁安装 安装Windows6.1-KB2999226-x64可能会“提示此更新不适用你的计算机”,这是由于系统缺少windows6.1-KB976932-X64集成补丁,需要在在Windows官网下载 安装完成windows6.1-KB976932-X64补丁后重启电脑,再次安装Windows6...

FY603438169的博客 7772

深入了解VC++各版本运行库及其应用

Visual C++(简称VC++)是由微软开发的一套C++集成开发环境(IDE),作为Visual Studio的一部分,它提供了一系列开发工具,包括编译器、调试器以及项目管理功能。VC++自1993年首次发布以来,一直是Windows平台下主要的C++开发环境之一。它的每一次更新都会引入新的特性和优化,为开发者提供更加强大和高效的工作效率。VC++2005运行库是Microsoft Visual Studio 2005开发环境的核心组件,它为基于.NET框架和C++开发的应用程序提供了必要的支持。

weixin_30598047的博客 1380

C#调用成功调用C++ dll笔记

正文开始:C#是一种托管(managed)的面向对象语言,而C++默认为非托管(native)。因此由C++生成的dll文件也应分为托管C++dll与非托管C++dll两种。以下将分别说明。 1. 生成与使用托管C++dll 什么是托管C++? 托管是.NET的一个专门概念,它倡导一种新的编程理念,因此我们完全可以把“托管”视为“.NET”。由托管概念所引发的C++应用程序包括托管代码、托管

xfboy2008的专栏 974

VirtualDesktop(虚拟桌面程序) v1.20纯绿版

VirtualDesktop(虚拟桌面程序) v1.20纯绿版

python怎样按某一列值拆分Excel表格

pd.ExcelWriter@python #用python按某一列拆分Excel工作表,将内容写入一个工作簿 本次以“按照表中的某一列,将一张表格拆分为多张表”的需求为例,简单介绍这个过程中用到的pd.ExcelWriter,及每一句的作用。 如上表《学生.xlsx》,假设有14万行28列,请按照学校名,拆分表格(不想用复制粘贴)。 ##代码及解释如下 import pandas as pd from time import time#用来计算时间,展示进度,减少焦虑 in_ws='学生.xlsx'#

learn_get的博客 6787

【Windows】vc2015运行库设置失败怎么办-win7无法安装vc2015提示设置失败

vc2015运行库设置失败怎么办-win7无法安装vc2015提示设置失败

姜太小白的博客 1676

【OpenArm|Control】openarm机械臂ROS2仿真控制

openarm_ros2 存储库包含用于 ros2_control 的包集合。 它抽象化了硬件控制,将手臂公开为接收位置、速度和扭矩命令并输出关节状态的接口。 openarm_bringup 包提供了通过包与 ROS2 控制框架集成的启动文件。该软件包提供启动文件和配置,用于启动硬件接口、加载控制器以及将物理臂连接到 ROS2 生态系统。启动后,您可以使用标准 ROS2 控制工具和接口来命令手臂并接收反馈。openarm_bringup bringup 包支持模拟硬件(用于模拟/测试)和通过硬件插件的真实

ai领域探索者,欢迎一起交流,目前从事具身智能行业。 2958

VC++.NET2005中DataGridView控件中加入下拉框的编程实现

VC++.NET2005中DataGridView控件中加入下拉框的编程实现                    VC++.NET2005中新增加了数据浏览控件DataGridView,虽然我们可以通过其DataGridViewComboBoxColumn方法在DataGridView中添加下拉框列,但随之而来得问题是一整列的下拉框,很不美观,并且还要编程为其绑定数据,不符合.NET的尽量少干涉

rainbowsoftware 1385

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规审计的考试指南,包含选择题、判断题、简答题和案例分析题。选择题考察《个人信息保护法》的关键条款,如敏感信息处理、跨境传输、委托处理等合规要求。判断题测试对个人信息处理规则的理解,如撤回同意、公开信息处理等。简答题要求阐述审计流程、个人权利、委托处理义务等内容。案例分析题以互联网企业为例,分析违规行为并提出整改建议,涉及数据收集、第三方共享、自动化决策等问题。全文旨在帮助中级审计人员掌握个人信息保护的法律规定和审计实务,提升合规审计能力。

qq_41525079的博客 547

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2015

Two Bugs of VC++.NET2005 IDE

First let’s see a program/*Abstract    : A program to show polymophism.Author      : Lijie WangEnvironment : Visual C++.NET 2005History     : 2006-10-29*/#includeusing namespace std;

Enjoy Codes-----Lijie Wang 788

【Clickhouse从入门到精通】第51篇:ClickHouse权限管理体系详解

摘要 本文是ClickHouse权限管理系列文章的第51篇,重点解析ClickHouse RBAC权限体系中的GRANT/REVOKE机制。文章详细介绍了GRANT语句的基础语法与权限类型,包括SELECT、INSERT等常规权限以及WITH GRANT OPTION转授权功能。特别深入讲解了列级权限的实现方式,通过SELECT(col1,col2)语法实现字段粒度的访问控制,并展示了权限查询与验证方法。本文还对比了ClickHouse 20.4版本前后权限管理体系的差异,为构建安全的多租户数据平台提供了关

xyghehehehe的专栏 440

VC++.Net2005的一些常识

1. 源文件:是类成员函数的实现 头文件:是类接口申明 资源文件:是程序中用到的图片和对话框等资源 2. stdafx.h和stdafx.cpp文件; 是第一次编译时系统按这两个文件内容创建预编译头文件(*.PCH)及预编译目标文件(stdafx.obj),而以后编译时不再重新建立这两个文件,从而提高了编译速度. 3. 在VS2005.net中为某个控件添加消息处理函数。直...

weixin_34275734的博客 357

硬件工程师八大细分岗位详解:从芯片到整机的技术分工与职业选择

硬件工程作为电子系统设计的核心领域,涉及从芯片级到整机级的完整技术链条。其基本原理是通过电路设计、信号处理和功率管理等技术,将电子元件集成为功能完备的硬件系统。随着产品复杂度提升,硬件工程师岗位出现高度专业化分工,这种细分不仅提升了技术深度,更优化了团队协作效率。在工程实践中,信号完整性和电源完整性成为高速数字设计的两个关键技术挑战,直接影响系统稳定性。本文基于行业热词"硬件工程师"和"信号完整性",深入解析八大细分岗位的技术差异,帮助从业者明确职业发展方向,构建系统化的硬件设计思维。

weixin_33811539的博客 451

AMBA-AXI and ACE协议详解(十)

本章介绍了ACE协议中的Barrier事务机制,包括内存屏障和同步屏障两种类型。

Crazzy_M的博客 614

关于vc++2005/vc++.net调试com组件时断点设置无效的问题

一直用.net,最近工作需要使用别的公司提供的接口,但是这些接口暴漏出来的参数居然是他们自己的类型,无奈,只好写一个用vc++写一个com,重新包装一下,供c# 来调用 写com的时候,发现没有办法进行调试,断点设置无效 网上搜索了n多种方法,大概有以下几种:1、无效断点所在的项目和启动项目的设置:项目->属性->配置属性->C/C++->常规->调试信息格式,这里不能为『禁用

yslfstar的专栏 2556

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

vc 6.0, Visual Studio.net 2005 , VC++ 6.0的MSDN下载链接

家里没有装vc,等到要用的时候才发现很多下载的链接都不可以用,还好在小艾的blog上找到了,收藏下来吧.1、Microsoft Visual C++ 6.0 SP6 简体中文企业版    为压缩包VC++ 6.0 with SP6 大企业集成安装版.ISO已集成官方SP6升级包,免序列号,安装完即可使用。,文件为镜像文件,须安装Daemon虚拟光驱软件,此处还提供MSDN帮助文件,分两部分,用

林建华的专栏 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

vc++生成程序不需要.net运行环境的可以执行exe程序的方法

Q:vc++编译出来后自动产生了debug文件里面的.exe文件不能直接打开执行? A:在新建VC++工程的时候,其中有一项是选择将MFC库作为共享的DLL还是静态的DLL。 因为MFC程序在运行时需要一些DLL文件的支持,你从集成开发环境下编译运行时,有默认的路径来调用这些所需的DLL,因此运行不会有问题。而当你单独运行文件夹下的可执行程序时,如果一开始选择的是作为共享的DLL,则就会因为可

拥抱变化 9831

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

这是VC++.NET2005的问题吗?

 看一个程序:  class B{private:     virtual void f1(){};}; class D:public B{private:     void f1(){};     virtual void f2(){};}; void main(){  D d;} 通过Watch窗口查看

Enjoy Codes-----Lijie Wang 758

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

用VC++2005调用用ASP.NET(C#)做的WebSerice接口进行操作数据库

 用VC++2005调用用ASP.NET(C#)做的WebSerice接口进行操作数据库作者:木水于(shemney_yang@qq.com) 关键字:VS2005 VC++2005  ASP.NET(C#)WebSerice  数据库 ADO  XML (代码下载:http://download.csdn.net/source/719983 

shemny的专栏 3610

VC2005之后的Mainifest问题

VC2005之后的Mainifest问题

Welcom to zougangx's blog 1023

VS2005/2008编译VC++非托管代码(无需依赖.Net Framework即可运行)

VS2005/2008编译VC++非托管代码(无需依赖.Net Framework即可运行)

paolei的笔记 2128
上一篇: C#窗体运行的唯一性问题
下一篇: 利用.net(C#)在Vista磨砂玻璃窗口上正确画出文字和图片(GDI+版)
VirtualDesktop
博客等级 码龄24年 72粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值