首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用VS2015 CLR在CDialog派生类上创建会返回0,在VC++ 6中运行良好

在使用VS2015 CLR创建CDialog派生类时返回0的问题,可能是由于兼容性或配置问题导致的。在VC++ 6中运行良好的原因可能是因为VC++ 6对于CLR的支持较为有限。

要解决这个问题,可以尝试以下几个步骤:

  1. 确保项目的配置正确:在VS2015中打开项目,检查项目的属性设置。确保项目的目标框架是正确的,并且与CLR版本兼容。可以尝试将目标框架设置为较低的版本,例如.NET Framework 3.5。
  2. 检查CDialog派生类的代码:检查CDialog派生类的代码,确保没有任何错误或不兼容的语法。确保使用了正确的命名空间和引用。
  3. 检查资源文件:如果CDialog派生类使用了资源文件(例如对话框模板),请确保资源文件的路径和名称正确,并且与项目的配置一致。
  4. 检查依赖项:确保项目中引用的所有依赖项(例如MFC、ATL等)都已正确配置,并且与项目的配置兼容。

如果以上步骤都没有解决问题,可以尝试以下额外的调试方法:

  1. 使用调试器:在VS2015中启动调试器,并设置断点在CDialog派生类的构造函数中。运行程序并观察调试器中的变量和调用堆栈,以查找可能的问题。
  2. 查看输出窗口:在VS2015中打开输出窗口,并观察程序的输出信息。可能会有一些有用的错误消息或警告,可以帮助定位问题。

如果以上方法仍然无法解决问题,建议在云计算领域的开发社区或论坛上寻求帮助。在这些社区中,可以与其他开发者交流经验,分享问题,并获得更多专业的建议和解决方案。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CLR via C#》笔记:第4部分 核心机制(3)

CLR的AppDomain功能解决了所有这些问题。AppDomain 允许第三方的、不受信任的代码现有的进程中运行,而CLR保证数据结构、代码和安全上下文不被滥用或破坏。...程序员经常将寄宿和AppDomain与程序集的加载和反射一起使用CLR寄宿 .NET Framework Windows平台的顶部运行。...然后,CLR查找栈同一个AppDomain中的任何 catch 块。有一个catch 块能处理异常,则异常处理完成,将继续正常执行。...宿主不能基于一些具体的加载项来构建和测试,因为加载项由不同公司创建,而且极有可能是宿主应用程序发布之后才创建的。这是宿主为什么要在运行时发现加载项的原因。...派生类型)之外的所有类型创建对象。

76410

C# new关键字和对象类型转换(双括号、is操作符、as操作符)

一、new关键字 CLR要求所有的对象都通过new来创建,代码如下: Object obj=new Object(); 以下是new操作符做的事情 1、计算类型及其所有基类型(一直到System.Object...CLR利用这些成员管理对象.额外成员的字节数要计入对象的大小. 2、从托管堆中分配类型要求的字节数,从而分配对象的内存,分配的所有字节都设为0 3、初始化对象的"类型对象指针"和"同步索引块"成员 4、...二、对象类型转换 1、基础知识 CLR最重要的特性之一就是类型安全.在运行时,CLR总能知道当前对象是什么类型,调用GetType方法即可知道当前对象是什么类型,由于GetTpye是非虚方法,所以一个类型不能伪装成另一个类型...是否兼容于Person类型,如果是,if语句内部转型时,CLR再次核实stu是否引用一个Person类型,CLR的类型检查增强了安全性,但无疑会对性能造成一定的影响,应为CLR首先必须去判断变量引用的实际类型...as操作符的做法是检查转型结果是否为null,如果直接使用这个结果可能抛出System.NullReferenceException异常,代码如下: public class Program

91890

解析C#类中的构造函数

构造函数设计的定义:    构造器是允许将类型的实例初始化为良好状态的一种特殊方法。 2.   ...(2).希望类仅通过调用某个静态成员函数来实例化(对象实例化工厂方法)   4.基类构造函数的使用:   编译器调用基类的构造器前,初始化任何使用了简化语法的字段,以维持源代码给人留下的...为了使代码“可验证”,类的实例构造器访问从基类集成的任何字段之前,必须先调用基类的构造器。如果派生类的构造器没有显示调用一个基类构造器,C#编译器自动生成对默认的基类构造器的调用。 2.   ...【C#不允许值类型(结构)定义无参数的构造器,但是CLR允许。C#运行值类型(结构)定义有参数的构造器】 三. ...3. .JIT对调用的位置选择: “字段初始化前”语义是首选的,因为它使CLR能够自由选择调用类型构造器的时机,而CLR会尽可能地利用这一点来生成运行得更快的代码。

3.1K50

C++:29 --- C++继承关系下的内存布局(下)

正如后文讨论强制转化和成员函数时指出的,这个偏移量造成少量的调用开销。 具体的编译器实现可以自由地选择内嵌基类和派生类的布局。...(G中,虚基类对象C的地址与G的“虚基类表指针”之间的偏移量 ( 当对于所有的派生类来说偏移量不变时,省略“d”前的前缀))。比如,32位平台,GdGvptrC是8个字节。...先根据P和RS中的偏移,调整this为P*,也就是S*,然后跳转到相应的虚函数处执行。 微软VC++实现中,对于有虚函数的多重继承,只有当派生类虚函数覆盖了多个基类的虚函数时,才使用调整块。...6 调整块 正如已经描述的,有时需要调整块来调整this指针的值(this指针通常位于栈返回地址之下,或者寄存器中),this指针加或减去一个常量偏移,再调用虚函数。...每当虚函数被调用时,该偏移数据(通常为0),被加到对象的地址,然后对象的地址再作为this指针传入。

1.1K20

C# 多线程六之Task(任务)二

前面介绍了Task的由来,以及简单的使用,包括开启任务,处理任务的超时、异常、取消、以及如果获取任务的返回值,回去返回值之后,立即唤起新的线程处理返回值、且如果前面的任务发生异常,唤起任务如果有效的处理异常等关于...如果任务没有完成,就调用Dispose方法,那么直接抛异常,如果完成了,它就释放了ManualResetEventSlim信号量(后面的文章介绍).所以如果你task中使用了其它的一些非托管资源,那么最好在代码里自己手动释放...,使用完之后。...或者自己实现了Task的派生类,把需要用的非托管资源加进去,然后使用派生类之后,调用Dispose方法....Faulted = 7 } 构造完Task对象是,状态为Created,当任务启动时,状态变为WaitingToRun,当Task实际在线程运行时,状态变为Running.如果当前任务为父任务

1.1K40

C++:28 --- C++内存布局(

由于C++基于C,所以C++也“基本”兼容C。特别地,C++规范“结构”使用了和C相同的,简单的内存布局原则:成员变量按其被声明的顺序排列,按具体实现所规定的对齐原则在内存地址对齐。...VC++虚基类表中增加了一些额外的项,这些项保存了从派生类到其各层虚基类的偏移量。 3 强制转化 如果没有虚基类的问题,将一个指针强制转化为另一个类型的指针代价并不高昂。...转化为E类型指针E*时,必须在指针加一个非0的偏移常量dFE。C ++规范要求NULL指针强制转化后依然为NULL ,因此在做强制转化需要的运算之前,VC++检查指针是否为NULL。...也就是说,普通函数调用的参数传递、调用、返回指令开销外,虚函数调用还需要额外的开销。 回头再看看P和Q的内存布局,可以发现,VC++编译器把隐藏的vfptr成员变量放在P和Q实例的开始处。...”,调用虚基类的析构函数(按照相反顺序) VC++中,有虚基类的类的构造函数接受一个隐藏的“最终派生类标志”,标示虚基类是否需要初始化。

99420

CLR via C#》Part2之Chapter4 类型基础(二)

但是将对象向它的某个派生类转换时,C#要求必须显示转换,因为这种转换可能在运行时报错。 类型伪装是去多安全漏洞的根源。...; } .csharpcode .lnum { color: #606060; } --> 使用as的形式,如果o不兼容IsaacZhang类型,将返回一个Null;因为使用as操作符,CLR只会校验一次对象的类型...命名空间和程序集 C#中我们使用using引入命名空间,但是CLR并不知道命名空间的任何事,访问一个类型时,CLR需要知道类型的完整名称(长的、包括句点符号的名称)以及该类型的定义具体在哪个程序集中。...默认情况下,C#编译器自动MSCorLib.dll程序集中查找“引用的类型”,即使你没有显式的告诉它。...一个线程创建时,会分配到一个1M大小的栈,这个栈的空间用于向方法传递参数。 M1方法开始执行时,在线程栈分配局部变量name的内存,如下图: ?

38230

C# 中的多态性

实际这两个概念完全没有关系,仅仅都带有一个"重"字。他们没有在一起比较的意义,仅仅分辨它们不同的定义就好了。 3、虚方法:即为基类中定义的允许派生类中重写的方法,使用virtual关键字定义。...如: Animal a = new Animal(); a.EatFood(); 执行输出结果为: Animal吃东西 4、抽象方法:基类中定义的并且必须在派生类中重写的方法,使用 abstract...5、隐藏方法:派生类中定义的和基类中的某个方法同名的方法,使用 new 关键字定义。...运行的结果如下: Animal Sleep Animal23点Sleep 2、 //重写和虚方法 a.EatFood(); ac.EatFood(); ad.EatFood(); 在这一段中,a、ac...现在回到刚才的例子,Main 函数时程序的入口, JIT 编译器将 Main 函数编译为本地CPU指定时,发现该方法引用了 Biology、Animal、Cat、Dog这几个类,所以 CLR 创建几个实例来表示这几个类型本身

63520

原 Introduction to the

为一种语言构建良好的调试器和分析器是一项很大的工作, 只有最重要的编程语言才有这些完备的功能。 但是, 由于 clr 实现的语言可以重用此基础结构, 因此对任何特定语言的负担大大减少。...非托管方法不会使用托管参数,也不会返回托管类型,这意味着托管代码种创建的对象和对象句柄都必须显示的释放,不幸的时,非托管的API不能采用CLR的功能,例如异常和继承,与托管代码的接口相比,非托管代码的接口往往是不太美妙的体验...CLR惊喜的控制程序执行的方方面面(可能除了个别的指令),CLR检测代码执行进入或者离开托管代码,这提供了多种有用的功能 2.调用非托管代码产生额外的成本,同时非托管代码也不能使用GC,这事实鼓励对非托管代码进行封装...如果一个一个类派生值一个基类,那么基类能用的地方,派生类也可以使用。相同的代码能够不同的类型中使用,这边是多态。...实际, 运行使用此功能为匹配字符串 (System.Text.RegularExpressions) 创建专用代码, 并为序列化对象而生成代码以存储文件或通过网络发送。

78190

.NET面试题系列 - C# 基础知识(2)

左边的是派生类,而b2的类型是B(的类型)。 D d4 = (D) d1; 可以执行。因为d1也是D类型,故没有发生实际转换。...执行完上面所有语句之后,内存中的状况如图(省略了类型对象指针): ? D d6 = (D) b1; 运行时错误。显式转换中,b1的类型是B,不能转换为其派生类D。...B b5 = (B) o1; 运行时错误。显式转换中,o1的类型是基类Object,不能转换为其派生类B。 2.3 什么是拆箱和装箱?它们对性能的损耗体现在何处?...返回对象的地址。 注意,不需要初始化int的类型对象,因为其执行程序之前,编译之后,就已经被CLR初始化了。 拆箱的过程 拆箱并不是把装箱的过程倒过来,拆箱的代价比装箱低得多。...string是基元类型Stringc#中的别名,故这两者没有任何区别。 注意字符串修改时,是堆上创建一个新的对象,然后将栈的字符串指向新的对象(旧的对象变为垃圾等待GC回收)。

88010

ILRuntime热更新

CLR初始化时创建的第一个AppDomain称为“默认AppDomain”,这个默认的AppDomain 只有Windows进程终止时才会被销毁。...优势 无缝访问C#工程的现成代码,无需额外抽象脚本API 直接使用VS2015进行开发,ILRuntime的解译引擎支持.Net 4.6编译的DLL 执行效率是L#的10-20倍 选择性的CLR绑定使跨域调用更快速...由于IL2CPP之类的AOT编译技术无法在运行时生成新的类型,所以创建委托实例的时候ILRuntime选择了显式注册的方式,以保证问题不被隐藏到上线后才发现。...大规模数值计算:如果在热更内需要进行大规模数值计算,则可以开启ILRuntime2.0版中加入的寄存器模式来进行优化 避免使用foreach:尽量避免使用foreach,不可避免地产生GC。...RunTest():170ms 可以明显看出CLR绑定对于方法执行耗时有显著的改善,同时先确定IMethodInvoke省去一定的查找时间,但对于性能的影响相对较小。

2.2K30

CGAL的编译以及VS中的使用

其次注意VS版本的问题 这里我使用的是vs2015 VS2015选择XX.Y=14.0 VS2017选择14.1 VS2019选择14.2 然后无脑傻瓜操作进行安装 (建议整个配置里的所有文件都放在一个文件夹里...进入命令行 cd到boost的文件夹内 该目录下运行bootstrap.bat 运行后会产生不b2.exe等文件 Boost非常大 建议只编译CGAL需要的依赖库 b2.exe --with-system...VS中使用CGAL库 CMake build 如图继续进行Configue和Generate操作 然后检查一下CGAL文件夹目录中是否有build文件夹 接下来打开生成的CGAL.sln文件 debug...新建工程 打开项目属性 VC++的包含目录添加 D:\local\boost_1_71_0(安装boost_1_71_0的目录) D:\compile\cgal\auxiliary\gmp\include...\include\CGAL(编译生成CGAL的include目录) VC++目录的的库目录中添加: D:\compile\cgal\build\lib(编译生成CGAL的库目录) D:\compile

44620

Windows10中Visual Studio2017中使用boost1.69.0

Boost是由C++标准委员部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程等。...目前已经更新到了1.72.0版本,官网下载地址为:https://www.boost.org/users/history/version_1_72_0.html,由于我之前自己Windows10系统安装的是...上图中是针对MSVC编译器即Visual VC++编译boost1.69.0的版本, 其中msvc是VC++编译器的名称,12.0代表是VS2013的版本,14.0是VS2015的版本,14.1是VS2017...源代码文件:Boost_lambda_Demo.cpp VS2017中创建一个VC++的控制台空项目Boost_lambda,添加一个Boost_lambda_Demo.cpp文件,代码如下: #include...点击确定按钮后,再看程序中的红色报错提示没有了,说明项目中可以使用Boost库了,如下图所示: ? 运行结果如下图所示: ?

4.2K31

.net 读书笔记

但并非所有的值类型都创建在线程的堆栈,例如作为类的字段时,值类型作为实例成员的一部分也被创建在托管堆上;装箱发生时,值类型字段也拷贝托管堆上。...对 32 位处理器来说,应用程序完成进程初始化后,CLR 将在进程的可用地址空间分配一块保留的地址空间,它是进程(每个进程可使用 4GB)中可用地址空间的一块内存区域,但并不对应于任何物理内存,这块地址空间即是托管堆...String 类型无疑是程序设计中使用最频繁、应用最广泛的基元类型,因此 CLR 设计为了提升 String类型性能考虑,实现了一种称为 字符串驻留 的机制,从而实现了相同 字符串可能共享内存空间。...base 关键字 其用于派生类中实现对基类公有或者受保护成员的访问,但是只局限构造函数、实例方法和实例 属性访问器中,MSDN 中小结的具体功能包括: 调用基类已被其他方法重写的方法。...多播委托返回值一般为void,不推荐多播委托中返回非void的类型。 匿名方法和Lambda表达式提供了更为简洁的语法表现,而这些新的特性主要是基于编译器而实现的,IL并没有本质的变化。

61110

win10下使用vs2015编译支持xp系统的libcurl

我的一篇博客中写了编译libcurl的,那种方式编译的curl动态库win7到win10可以使用,但是xp系统里就不能使用了,接下来讲解一种方法可以xp系统里使用cur。...安装好perl后,可以尝试使用ppm install dmake命令来进行安装dmake模块,我电脑里无法安装,因此直接使用dmake离线包。...编译供xp系统使用的不能用openssl的1.1版本,而应该用1.0版本,这里下载OpenSSL_1_0_2u 下载完成解压,使用vs2015的开发人员命令提示符进入到解压后的目录,在这里编译...使用vs2015打开curl工程 将解决方案配置改为如下所示: 右键libcurl工程,将平台工具集改为如下: vc++目录的包含目录和库目录设置为编译好的opensll...,把curl这个工程也进行相同设置,就可以编译出可以xp系统里运行的libcurl。

1.1K20

C# try catch finally

前言  catch 和 finally 一起使用的常见方式是: try 块中获取并使用资源, catch 块中处理异常情况,并在 finally 块中释放资源。...如果没有一层次,则向用户抛出,此时,如果你调试,程序将中断运行,如果是部署的程序,将会中止。   如果没有catch块,异常总是向上层(如果有)抛出,或者中断程序运行。...无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你try块内用return返回了,返回前,finally总是要执行,这以便让你有机会能够异常处理最后做一些清理工作。...CLR执行中也有栈,但这个栈的用途与传统的本地代码中的栈并不完全相同。...代码中当我们执行new时,对应的IL是newobj,其结果是创建一个TestClass2类型的对像并返回一个引用放置于栈,之后的stloc就将这个引用保存为局部变量,于是栈没有了其他内容。

1.7K20

6-方法

一个类的实例构造器访问基类的继承字段之前,必须调用基类的实例构造器,C#编译器自动产生对基类默认构造器的调用代码。...特殊情况下类型实例的创建不会调用实例构造器:反序列化一个对象时、调用Object的MemberwiseClone方法克隆对象时。...静态构造器由CLR负责,一旦被调用,那么整个应用程 序域[AppDomain]的生命周期内就不再被用;静态构造器不应该调用基类的静 态构造器,不需要这样做是因为基类的静态成员并不被派生类所继承。...但是我们看 到的是派生类内部引用可基类的静态字段,事实这不是继承而是编译时静态绑定, 其他的静态成员也是如此的。...out修饰的参数调用前可以不初始化,并且被调方法不能 接读取该参数的值,必须在方法返回之前为参数赋值。ref修饰的参数调用前则必须初 始化。

63550
领券