我尝试使用本教程启动c#directX编程: http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut2.php 我正在使用2015年的Visual Studion社区,我的代码是这样的:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace DirecxTest01
{
public partial class Form1 : Form
{
private Device device;
public Form1()
{
InitializeComponent();
InitializeDevice();
}
private void InitializeDevice()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 1.0f, 0);
device.Present();
}
}
}
我还参考了所有DirectX dll的参考资料。当我运行程序时,没有任何事情发生,甚至没有窗体窗口出现。没有错误信息,只是没有。我试图逐行注释掉DirectX Stuff。即使使用此代码,程序也会挂断:
private void InitializeDevice()
{
PresentParameters presentParams = new PresentParameters();
//presentParams.Windowed = true;
//presentParams.SwapEffect = SwapEffect.Discard;
//device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
}
当我发表评论时
//PresentParameters presentParams = new PresentParameters();
至,至少Windowas表格上传。
我的代码出了什么问题?
答案 0 :(得分:1)
您使用的教程适用于已弃用的Managed DirectX 1.1程序集。它们是为.NET 1.1编写的,与.NET 4.0或更高版本不兼容 - 尽管有一些hacks可以尝试使它们工作。
/platform:anycpu
)中使用它们。您必须使用/platform:x86
构建并保持在32位应用程序的2 GB内存空间的限制内。简而言之:请勿使用它们。使用更现代的东西,如SharpDX,SlimDX或Unity3D。
答案 1 :(得分:0)
我知道这是一个旧线程,但我遇到了确切的问题,并且“不使用 DirectX”的解决方案不是一个选项,因为我在现有系统上工作,而无法使用升级所有相关部分的选项DirectX dll。
幸运的是,我找到了一个解决方案,可以在 .NET Framework 4.6.1 版上使用旧的 DirectX 程序集。
只需将其添加到 App.config 文件中(</appSettings>
正下方):
<startup useLegacyV2RuntimeActivationPolicy="true" >
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.61"/>
</startup>