在 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,一切搞定
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)