visual studio2005 vs2005怎样新建c++托管程序

visual studio2005 vs2005怎样新建c++托管程序,第1张

C++ 托管扩展参考

项目中添加 C++ 托管扩展 Windows 窗体

在 Visual C++ 中,可以轻松地向您的项目中添加用 C++ 托管扩展编写的 Windows 窗体。C++ 托管扩展 Windows 窗体是从 Form 类中继承的 __gc 类。

注意 不能向本机项目添加用托管扩展编写的 Windows 窗体。如果希望进行混合模式的编程,则创建 C++ 托管扩展应用程序,并使用属性化代码指定本机或托管代码块。

向项目中添加 Windows 窗体

在解决方案资源管理器中右击项目。

在快捷菜单上,单击“添加”,然后单击“添加新项”。

将出现“添加新项”对话框。

在“模板”窗格内,选择“Windows 窗体应用程序 (.NET)”图标。

在“名称”字段内,键入新窗体的名称(例如 Form2),然后单击“确定”。

新源文件(如 Form2.h 和 Form2.cpp)生成,并且 Windows 窗体设计器在集成开发环境 (IDE) 中打开。

如果希望窗体继承有别于“窗体”类的类,则在类声明中指定该类,并添加合适的引用。例如:

复制代码

#include "Form1.h"

public __gc class Form2 : public Form1

{

}注意 继承窗体时,请始终在单独的 DLL 中放置基类。

有关更多信息,请参见 Windows 窗体继承。

看下MSDN的说明吧.

现象如下:

LoaderLock was detected

Message: DLL“C:"WINDOWS"assembly"GAC"Microsoft.DirectX"1.0.2902.0__31bf3856ad364e35 "Microsoft.DirectX.dll”正试图在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

出错代码位置如下:

//打开一个新的Video文件

myVideo = new Video(openFileDialog1.FileName)

去网上查了一下资料:.NET2.0中增加了42种非常强大的调试助手(MDA,Loaderlock是其中之一。Loaderlock检测在一个拥有 *** 作系统loader lock的线程上(如上例的video的运行线程)运行托管代码的情况。这样做有可能会引起死锁,并且有可能在 *** 作系统加载器初始化DLL前被使用。虽然 这样做很有必要,但在进行开发调试的时候,实在太麻烦。解决方案如下:

1.改注册表

在HKEY_LOCAL_MACHINE"SOFTWARE"Microsoft".NETFramework下面增加一个String,值为"0"

不过这样做,在该计算机上所有基于.NET2.0开发都得不到MDA的好处。

2.为项目增加一个配置文件.

3.直接修改项目设置

最简单的方法,在"Debug"菜单下----"Exceptions"----"Managed Debugging Assistants"中勾掉"LoaderLock")

再Debug,OK,一切搞定


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6949349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-30
下一篇 2023-03-30

发表评论

登录后才能评论

评论列表(0条)

保存