Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не подключить библиотеку, ссылка на неразрешенный внешний символ 
V
    Опции темы
Pro100MoNEy
Дата 30.1.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Скачал драйвер и библиотеки для работы с lpt под семеркой x64 создал проект консольный в Visual Studio в линковшике добавил либы, хидеры подключил, пытаюсь вызвать функцию из хидера библиотечного пишет ошибку 
Цитата

....obj : error LNK2019: ссылка на неразрешенный внешний символ "int __stdcall InitializeOls(void)" (?InitializeOls@@YGHXZ) в функции _main



Второй день сижу все библиотеки что качал такое выдают, скажите пожалуйста что хочет от меня студия почему коверкает имена функций, пробовал даже через #pragma comment (lib, "WinRing0x64.lib") нифига непомогает.
PM MAIL   Вверх
volatile
Дата 30.1.2012, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Pro100MoNEy @  30.1.2012,  22:34 Найти цитируемый пост)
"(?InitializeOls@@YGHXZ) в функции _main


А вы уверены что имена заманглены в либе, также как и ваши?
Скорей всего нет, то есть нужно писать:
extern "C"

читайте документацию драйвера.


PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Читал имена не мои все взято из архива с драйвером, в документации написано подключить либу и хидер.


Попробовал extern "C"
Цитата

 error LNK2001: неразрешенный внешний символ "_InitializeOls@0"


Прикрепил архив с библиотекой

Это сообщение отредактировал(а) Pro100MoNEy - 31.1.2012, 01:27

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  WinRing0.7z 89,28 Kb
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Вопрос, что именно делает такая строка почему 2 типа void и _stdcall?
Цитата

 typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); 


И почему DevC++  нормально ее хавает а  студия ругаеться на _stdcall 
Цитата

использование вложенного оператора обьявления после соглашения о вызовах недопускаеться

PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Пытаюсь подгрузить длл вручную но Loadlibary ненаходит длл
код
Цитата

#include "stdafx.h"
#include <windows.h>
#include <conio.h>


int _tmain(int argc, _TCHAR* argv[])
{
    void (*DllFunc) (void);
    HMODULE h;

  h=LoadLibrary(TEXT("WinRing.dll"));
  if (!h)
  {
    printf("Error WinRing.dll\n");
    getch();
    return 0;
  }

  DllFunc=(void (*) (void))
            GetProcAddress(h,"InitializeOls");
    if (!DllFunc)
  {
    printf("error no func\n");
    getch();
    return 0;
  }
  DllFunc();
    return 0;
}




В чем проблема может быть?
длл зарегестрированные в системе находит а эту нет хоте по всем папкам поиска распихал ее
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



скорее всего InitializeOls  объявляется как __cdecl

Код

 typedef void __cdecl (*oupfuncPtr)(short portaddr, short datum); 


Это сообщение отредактировал(а) Dem_max - 31.1.2012, 14:23


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



В хидере она обьявлена так

Цитата

BOOL // TRUE: success, FALSE: failure
WINAPI InitializeOls();


А как избавиться от ошибки линковщика?

Почему кокгда есть либы хидеры длл ,вроде все есть для счастья а эта херня неработает?!

Это сообщение отредактировал(а) Pro100MoNEy - 31.1.2012, 14:30
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата(Pro100MoNEy @ 31.1.2012,  14:27)
В хидере она обьявлена так

Цитата

BOOL // TRUE: success, FALSE: failure
WINAPI InitializeOls();


А как избавиться от ошибки линковщика?

Ну а так какого ты вводишь в заблуждение вот с этим ??
Цитата

typedef void __stdcall (*oupfuncPtr)(short portaddr, short datum);



Код

typedef BOOL __stdcall (*oupfuncPtr)(void);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



А какая разница как она обьявляеться почему она не линкуется?
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



сделай так 
#pragma comment (lib, "WinRing0.lib")


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Да делал я так, непомогает=(
PM MAIL   Вверх
bsa
Дата 31.1.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



открой *.lib файл текстовым редактором (лучше hex) и посмотри, в каком виде представлены названия функций. Если вида 'Z4askj5kjdlk', то либа собрана компилятором С++ и предназначена исключительно для mingw.
PM   Вверх
Dem_max
Дата 31.1.2012, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



нет там InitializeOls@@YGHXZ


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Цитата(bsa @ 31.1.2012,  16:45)
открой *.lib файл текстовым редактором (лучше hex) и посмотри, в каком виде представлены названия функций. Если вида 'Z4askj5kjdlk', то либа собрана компилятором С++ и предназначена исключительно для .

Примерно так ?InitializeOls@@YGHXZ что это значит? Использовать mingw?
А почему функция Loadlibary может не грузить длл? просто ненаходит ее,
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

А почему функция Loadlibary может не грузить длл? просто ненаходит ее,

Ты сам себе дал ответ, тупо не находит ее.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Вопрос почему ненаходит, везде где ищет положил)
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



как называется эта DLL спиши точно. И где она вообще лежит


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Код

 h=LoadLibrary("WinRing0x64.dll");
     if (!h)
  {
    printf("Error DLL.dll\n");
    getch();
    return 0;
  }


Вот так я ее вызываю, лежит в папке с исполняемым файлом, в папке system32, windows, system32\drivers
Функция упорно выдает ошибку.
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



а GetLastError() что выдает ???? Наверное не могу загрузить DLL потому что она скомпилирована под х64 разрядную систему, а а загружающий ее процесс компилится под х32 разрядную систему ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Ошибка 193, неявляеться приложением win32, а как в студии скомпилить под x64?
PM MAIL   Вверх
Dem_max
Дата 31.1.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



Цитата

Ошибка 193, неявляеться приложением win32,

Ну собственно так я и думал.


Цитата

а как в студии скомпилить под x64?

http://forum.sources.ru/index.php?showtopic=349845&st=0


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Pro100MoNEy
Дата 31.1.2012, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 7.11.2010

Репутация: нет
Всего: нет



Все понял, СПАСИБО ОГРОМНОЕ!!
PM MAIL   Вверх
bsa
Дата 1.2.2012, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Pro100MoNEy @  31.1.2012,  18:31 Найти цитируемый пост)
А почему функция Loadlibary может не грузить длл? просто ненаходит ее, 

А ты пробовал узнать причину используя GetLastError?
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.