Как понимать предупреждение
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.216] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online
Как понимать предупреждение
|
Сообщ.
#1
,
|
|
|
|
warning C4273: 'InstallWinIoDriver' : inconsistent dll linkage. dllexport assumed.
ниже перевод( мой) непоследовательное{противоречивое} dll редактирование. dllexport принятый. Я получаю такое предупреждение при линковке и ,хотя программа собирается, но не делает того что я ожидаю. В поиске нашел ответ от ADIL При создании DLL должно быть dllexport, а не dllimport, о чем и сообщает компилятор: Но я не делаю dll она прилагается ![]() ![]() #include <windows.h> #include <stdio.h> #include <stdlib.h> #include "WinIo.h" bool _stdcall InstallWinIoDriver ( PSTR pszWinIoDriverPath, bool IsDemandLoaded ); void main() { InstallWinIoDriver("c:\\WinIo.sys",false); if(InstallWinIoDriver("c:\\WinIo.sys",false)) printf("%s","Instal complecte"); } ___________ |
|
Сообщ.
#2
,
|
|
|
|
В общем сообщение о кривой линковке (сборке, один и моих бывших преподов ВУЗа, прибил бы меня за слово "линковка"
- лирическое отступление )А вообще мало информации для ответа, что собирается на каком компилере, с какими либами и т.д. ... |
|
Сообщ.
#3
,
|
|
|
|
Цитата BlackEmperor @ В общем сообщение о кривой линковке (сборке, один и моих бывших преподов ВУЗа, прибил бы меня за слово "линковка" - лирическое отступление )А вообще мало информации для ответа, что собирается на каком компилере, с какими либами и т.д. ... Спасибо за ответ. Собирается вышеприведенная программа для инсталляции драйвера WinIo под XP. IDE Visual C++ 6.5. Линкуется с WinIo.lib. Все строго по инструкции, прилагаемой к программе. P.S Что плохого в слове линковка P.P.S Как можно узнать установился ли драйвер в систему? |
|
Сообщ.
#4
,
|
|
|
|
Цитата BlackEmperor @ При создании DLL должно быть dllexport При создании DLL?? А тип проекта какой? Вы DLL делаете или EXE? |
|
Сообщ.
#5
,
|
|
|
|
Цитата MinLexx @ Цитата BlackEmperor @ При создании DLL должно быть dllexport При создании DLL?? А тип проекта какой? Вы DLL делаете или EXE? EXE |
|
Сообщ.
#6
,
|
|
|
|
А _stdcall обязательно нужно?
Что в WinIo.h? Цитата MSDN 'function' : inconsistent DLL linkage Two definitions in a file differ in their use of dllimport. The following sample generates C4273: // C4273.cpp // compile with: /W1 char __declspec(dllimport) c; char c; // C4273, delete this line or the line above to resolve int main() { } Два определения в файле отличаются друг от друга (один с dllimport, другой с dllexport например) Думается, проблема в WinIo.h, в котором объявлена InstallWinIoDriver как-то по-другому? |
|
Сообщ.
#7
,
|
|
|
|
А надо ли вообще объявлять прототип InstallWinIoDriver? В "WinIo.h" его разве нет?
|
|
Сообщ.
#8
,
|
|
|
|
Цитата Adil @ А надо ли вообще объявлять прототип InstallWinIoDriver? В "WinIo.h" его разве нет? Adil Спасибо. Проверю. Прототип объявил на автопилоте Два определения в файле отличаются друг от друга (один с dllimport, другой с dllexport например) Думается, проблема в WinIo.h, в котором объявлена InstallWinIoDriver как-то по-другому? MinLexx Спасибо.Проверю. ![]() P.S Как можно узнать установился ли драйвер в систему, кроме тестирования программы на железе? |
|
Сообщ.
#9
,
|
|
|
|
Цитата Adil @ А надо ли вообще объявлять прототип InstallWinIoDriver? В "WinIo.h" его разве нет? Adil Еще раз спасибо. Предупреждений нет Но при попытке исполнить простой тест ![]() ![]() #include <windows.h> #include <stdio.h> #include <stdlib.h> #include "WinIo.h" DWORD *a; void main() { InstallWinIoDriver("c:\\WinIo.sys",false); if(InstallWinIoDriver("c:\\WinIo.sys",false)) printf("%s","Instal complecte"); InitializeWinIo(); if(InitializeWinIo()) printf("%s","Init complecte"); SetPortVal(278,15,1); GetPortVal(278,a,1); printf("%d",a); } получаю Instal complecte 0 что свидетельствует ИМХО о том, что функция InitializeWinIo() не завершилась успешно.Все делаю по инструкции к пакету WinIo. Где я неправ? Может не вижу чего то очевидного. |
|
Сообщ.
#10
,
|
|
|
|
Вообще, достаточно странный код. я бы убрал несколько строк...
![]() ![]() void main() { // эту //InstallWinIoDriver("c:\\WinIo.sys",false); if(InstallWinIoDriver("c:\\WinIo.sys",false)) printf("%s","Instal complecte"); // и эту //InitializeWinIo(); if(InitializeWinIo()) printf("%s","Init complecte"); SetPortVal(278,15,1); GetPortVal(278,a,1); printf("%d",a); } Добавлено Цитата oksman @ GetPortVal(278,a,1); Так делать нельзя, запись по неинициализированному указателю. ![]() ![]() DWORD a; GetPortVal(278,&a,1); |
|
Сообщ.
#11
,
|
|
|
|
Цитата Uncle_Bob @ Так делать нельзя, запись по неинициализированному указателю. ![]() ![]() DWORD a; GetPortVal(278,&a,1); Большое спасибо Согласен,что по п1.код излишний,по п2 явная ошибка. Но проблема то в том, что ![]() ![]() if(InstallWinIoDriver("c:\\WinIo.sys",false)) printf("%s","Instal complecte"); исполняется( и в реестре прописана и winio.sys в папке драйверов есть) а функция ![]() ![]() if(InitializeWinIo()) printf("%s","Init complecte"); в 6 студии не исполняется вообще т.е. Init complecte я не вижу. При компиляции в 7.1 студия не дает мне увидеть, что произошло(мелькнул экран и все) Но порт не реагирует Как в 7.1 студии увидеть результат?( поставил только два дня как, еще осваиваюсь )Кстати , столкнулся с непонятным явлением. В 98 по ,старту системы, порт 0x278 встает в 8( я потом его сам обнуляю либо этот бит не подключаю) а в XP по старту встает в 255 :ну и не управляется пока у меня никак ![]() MinLexx Спасибо за цитату MSDN .Перевел. Русским языком сказано " Двойное определение функции - удалите эту строку" |
|
Сообщ.
#12
,
|
|
|
|
Цитата oksman @ в 6 студии не исполняется вообще Видимо, все-таки исполняется, но возвращает false ![]() Остается продиагностировать проблему. Есть какой-нибудь вызов для получения кода ошибки? Я с WinIo не знаком. |
|
Сообщ.
#13
,
|
|
|
|
Цитата Uncle_Bob @ Цитата oksman @ в 6 студии не исполняется вообще Видимо, все-таки исполняется, но возвращает false ![]() Остается продиагностировать проблему. Есть какой-нибудь вызов для получения кода ошибки? Я с WinIo не знаком. Согласен.Неточно выразился. К сожалению кодов ошибок в WinIo нет. Единственное, что нашел в хелпе (перевод мой) ![]() ![]() InitializeWinIo Эта функция инициализирует WinIo библиотеку. bool _stdcall InitializeWinIo(); Параметры: Нет Возвращаемые значения: При нормальном завершении, функция возвращает true. Иначе возвращает false. Замечания: Функцию InitializeWinIo следует вызывать перед использованием любой другой функции библиотеки. Обратите внимание: • Нет необходимости вызывать функцию InitializeWinIo перед вызовом функций InstallWinIoDriver и RemoveWinIoDriver. • Под Windows NT / 2000/xp, вызванная InitializeWinIo предоставляет приложению полный доступ к адресному пространству ввода - вывода. После вызова функции, приложение может свободно использовать функции _inp/_outp, обеспеченные C библиотекой во время выполнения, чтобы обращаться к портам ввода - вывода системы. Что еще выяснил: С пакетом идет пример ![]() ![]() void main() { DWORD dwPortVal; DWORD dwMemVal; bool bResult; HANDLE hPhysicalMemory; PBYTE pbLinAddr; // Call InitializeWinIo to initialize the WinIo library. bResult = InitializeWinIo(); if (bResult) { // Under Windows NT/2000/XP, after calling InitializeWinIo, // you can call _inp/_outp instead of using GetPortVal/SetPortVal printf(" Initialization WinIo.\n");// Это я добавил для контроля GetPortVal(0x378, &dwPortVal, 4); SetPortVal(0x378, 10, 4); // When you're done using WinIo, call ShutdownWinIo ShutdownWinIo(); } else { printf("Error during initialization of WinIo.\n"); exit(1); } } Так он исполняется 1-2 раза из 20 Ничего не могу понять P.S.А как в 7 студии посмотреть результать исполнения?. Экран мелькнул и все. P.P.S. Ничего не делал,ничего не менял, вдруг заработала Извини за напряг |