UWP无法打开com0com虚拟端口

时间:2017-01-23 05:40:48

标签: c# uwp com0com

com0com COM13 and COM14

  has_one :productosxpza, class_name: "Productosxpza", foreign_key: "Producto"
  accepts_nested_attributes_for :productosxpza

  def self.to_csv(options = {})#exportar
    CSV.generate(options) do |csv|
      csv << column_names
      all.each do |producto|
        csv << producto.attributes.values_at(*column_names)
      end
    end
  end

  def self.import(file)#importar
    spreadsheet = open_spreadsheet(file)
    header = spreadsheet.row(1)
    (2..spreadsheet.last_row).each do |i|
      row = Hash[[header, spreadsheet.row(i)].transpose]
      producto = find_by_Clave(row["Clave"]) || new
      producto.attributes = row.to_hash.slice(*row.to_hash.keys) #*row.to_hash.keys para rails 4 que sustituye el attr_accesible de rails 3
      producto.save!
    end
  end

  def self.open_spreadsheet(file)#importar
    case File.extname(file.original_filename)
     when '.csv' then Roo::Csv.new(file.path, packed: false, file_warning: :ignore)
     #when '.xls' then Roo::Excel.new(file.path, packed: false, file_warning: :ignore)
     when '.xlsx' then Roo::Excelx.new(file.path, packed: false, file_warning: :ignore)
     #else raise "Unknown file type: #{file.original_filename}"
     else raise "El formato debe ser .xlsx ó .csv"


     end
  end

informations.Any()为false

我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

我还没有在UWP上尝试过,但是当访问10或更高的COM端口时有Windows quirk:您需要从用户模式指定完整的符号设备名称。即,前置\\.\

var selector = SerialDevice.GetDeviceSelector(@"\\.\COM14");

答案 1 :(得分:1)

Microsoft SerialCommuncation文档站点描述了当前不支持系统内部端口: Microsoft Docs about windows.devices.serialcommunication

我不明白为什么不这样做,他们将来可能会添加此功能。

一种解决方法是:

C# 使用标准.NET System.IO.Ports.SerialPort类(除GetPortNames()之外),所有内容在.NET中均可用于UWP 6.1.5。作为GetPortNames的替代,您可以P / Interop到GetCommPorts。

C ++ / winrt 使用新的Windows 10 RS3 / 4 API调用OpenCommPort。请参见Windows头文件中的函数原型,因为此函数当前未在MS文档中记录。

请注意,还应确保应用程序在.appxmanifest文件中“声明”了对串行端口的访问权限:

<DeviceCapability Name="serialcommunication">
  <Device Id="any">
    <Function Type="name:serialPort" />
  </Device>
</DeviceCapability>