Я установил, очевидно, успешно com0com v2.2.2.0 на 64-битную машину Windows 7.
Я запускаю служебную программу, например:
command> install PortName=COM9 PortName=COM8
CNCA0 PortName=COM9
CNCB0 PortName=COM8
ComDB: COM8 - logged as "in use"
ComDB: COM9 - logged as "in use"
command> busynames COM?*
COM3
COM4
COM5
COM6
COM8
COM9
COMPOSITEBATTERY
Примечание: зарегистрированный как "in use" НЕ является сообщением об ошибке?
Затем я пытаюсь открыть COM8 следующим образом
m_hIDComDev = CreateFileA( szCodedPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( m_hIDComDev == NULL || m_hIDComDev == INVALID_HANDLE_VALUE ) {
wchar_t * lpMsgBuf;
DWORD dw = ::GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
myErrorMsg = (char*)malloc( 200 );
sprintf(myErrorMsg,"Error creating connection %s ( %s ) %S",
szPort,szCodedPort,lpMsgBuf);
Это не работает с
Error creating connection COM8 ( COM8 ) The system cannot find the file specified.
Я пробовал как "COM8", так и "\\.\COM8"
.
Обратите внимание, что тот же самый вызов CreateFileA отлично работает на "реальном" COM-порту.
В: Может ли кто-нибудь сказать мне, в чем проблема?
A: В Windows 7 64 бит вам нужно включить тестирование неподписанных драйверов.
-
Запустите командную строку как администратор. (Недостаточно просто запустить учетную запись с правами администратора. Подробнее см. здесь.
-
Введите команду
bcdedit -set TESTSIGNING ON
- перезагрузка
. (Windows будет помещать "тестовый режим" в нижнем правом углу рабочего стола)
В Windows 8 этот метод не работает удовлетворительно или легко. Ниже приведено обсуждение и обходные пути.
В качестве альтернативы вы можете попробовать подписанную версию - я НЕ пробовал это сам.