我正在尝试构建简单的软件以连接到Unity中的Windows上的MIDI输出设备并发送MIDI数据.
为了避免重新发明轮子,我开始在CodeProject上使用C#Midi Toolkit,它支持.NET 2.0.
我遇到的问题是它在Unity编辑器中工作正常,但 在独立的Windows构建中失败了.
这是基本的连接/播放声音代码:
// Log devices
int deviceCount = OutputDevice.DeviceCount;
for (int i = 0; i < deviceCount; i++)
{
Debug.Log(string.Format("Detected MIDI Device with ID {0}:{1}", i, OutputDevice.GetDeviceCapabilities(i).name));
}
deviceID = 1;
Debug.Log(string.Format("Connected to {0}", deviceID));
// Connect to device
device = new OutputDevice(deviceID);
// Play Middle C
device.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, note, 127));
Run Code Online (Sandbox Code Playgroud)
在独立版本中,我得到以下异常:
OutputDeviceException:指定的设备句柄无效.
我查看了源代码并注意到该库正在使用Win32句柄来获取winmm.dll,我认为这可能与它有关但不确定从何处开始.
谁能提供任何有关如何处理此问题的见解?我可能会看看专门为Unity构建的替代品,但我有兴趣了解为什么这样的东西首先不起作用.
我正在测试 T4 文本模板的运行时文本生成功能。
通常模板必须从应用程序的其他部分导入一些数据。为方便起见,模板构建的代码是一个分部类。您可以在项目的另一个文件中创建同一类的另一个部分。该文件可以包含一个带有参数、属性和函数的构造函数,这些参数、属性和函数既可以被嵌入在模板中的代码访问,也可以被应用程序的其余部分访问。
我试过这个(VS2017 - .NET 4.6.1)并在编译时得到以下错误 -
“CSharpFunction”不包含“TransformText”的定义
命名空间不能直接包含成员,例如字段或方法
编译转换:当前上下文中不存在名称“FunctionName”
当前上下文中不存在名称“ErrorGeneratingOutput”。
CSharpFunction.cs
partial class CSharpFunction
{
private string FunctionName;
public CSharpFunction(string functionName)
{
FunctionName = functionName;
}
}
Run Code Online (Sandbox Code Playgroud)
CSharpFunction.tt
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
public void <#=FunctionName#>()
{
Console.WriteLine("<#=FunctionName#>");
}
Run Code Online (Sandbox Code Playgroud)
程序.cs
class Program
{
static void Main(string[] args)
{
var obj = new CSharpFunction("Test");
string output …Run Code Online (Sandbox Code Playgroud)