2013-02-24 9 views
0

Я пытаюсь использовать Win32 API для написания моей собственной небольшой библиотеки для подключения к последовательному порту. К сожалению, все sample code, которые я нашел, используют kernel32.dll (что я могу сделать), но команда createFile использует префикс win32Com, который я предполагаю, является частью некоторого пространства имен, которое мне нужно использовать. К сожалению, я не могу понять это, и, будучи нобом, я не знаю, как узнать, есть ли эта ссылка, которую мне нужно включить, или что-то еще.Использование win32Com (не существует в текущем контексте)

Может ли кто-нибудь указать мне пример кода, который объясняет, как это сделать? Или скажите мне, где я ошибаюсь? Я буду включать раздел «usings» и DllImport, а также где я пытаюсь создать файл ниже.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.IO.Ports; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Windows.Forms; 

Существует некоторый код здесь, инициализирует форму и т.д.

[DllImport("kernel32.dll", SetLastError = true)] 
     internal static extern IntPtr CreateFile(String lpFileName, 
      UInt32 dwDesiredAccess, UInt32 dwShareMode, 
      IntPtr lpSecurityAttributes, UInt32 dwCreationDisposition, 
      UInt32 dwFlagsAndAttributes, IntPtr hTemplateFile); 

Но когда я использую следующий, я получаю ошибку: The name 'Win32Com' does not exist in the current context.

hPort = Win32Com.CreateFile(cs.port, 
       Win32Com.GENERIC_READ | Win32Com.GENERIC_WRITE, 0, IntPtr.Zero, 
       Win32Com.OPEN_EXISTING, Win32Com.FILE_FLAG_OVERLAPPED, 
       IntPtr.Zero); 

Я уверен, что это простая ошибка, которую я делаю, но, к сожалению, у меня нет набора навыков в этот момент, чтобы узнать, где это.

Заранее благодарен!

+1

Просто из любопытства, почему вы не можете использовать System.IO.Ports.SerialPort? http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx –

+1

Это то, что я сделал исторически, к сожалению System.IO.Ports.SerialPort выполняется довольно плохо; то есть он работает только с примерно 75% оборудования. [My thread here] (http://stackoverflow.com/questions/14885288/io-exception-error-when-using-serialport-open) и [мой другой здесь] (http://stackoverflow.com/questions/ 15014137/how-to-ignore-the-exception-and-complete-the-try) объясните, почему. Очень разочаровывает, но объясняет, почему я публикую этот вопрос :) – tmwoods

ответ

1

В вашей ссылке сказано: «Win32Com - это вспомогательный класс, используемый в качестве контейнера для статических определений функций, структур и констант API, которые я буду использовать через P/Invoke». поэтому вам нужно создать его и поставить там следующее объявление CreateFile. Вы также должны прочитать около P/Invoke, чтобы понять, как это работает.

+0

Хорошо, это хорошая отправная точка для меня. Это те вещи, которые я должен прочитать примерно шесть раз, прежде чем понять 50% этого, но это характер изучения этих новых тем. Спасибо, я сообщу позже. – tmwoods