На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> LoadLibrary() 14001 Error
    Здравствуйте.
    Столкнулся с проблемой при загрузке Win32 dllлок. Библиотека не загружается, функция LoadLibrary выдает ошибку 14001. На моей машине все работает, ошибки выявились только при тестировании на других машинах. Подозреваю, что есть проблемы с С-рантаймом. Если кто сталкивался, то что может быть неправильно сконфигурировано?
    Спасибо.
        Спасибо.
        У меня стояли настройки Code Generation как /MD - MultiThreadedDll. Заменил на /MT - работает.
        Бывает что не замечаешь очевидного. При /MТ рантайм линкуется статически.
          Есть ли альтернатива такому объявлению функции при экспорте из длл, используя явное связывание?

          ExpandedWrap disabled
            extern "C" __declspec(dllexport) void MyFunc(void);

          почему - то если объявить функцию без extern "C", то GetProcAddress() ее не найдет.
            Потому что имя у нее будет несколько изменено. Гуглить "name mangling".
              Цитата Мохнатый @
              Есть ли альтернатива такому объявлению функции при экспорте из длл, используя явное связывание?

              ExpandedWrap disabled
                extern "C" __declspec(dllexport) void MyFunc(void);

              почему - то если объявить функцию без extern "C", то GetProcAddress() ее не найдет.

              см. в MSDN Module-Definition (.def) Files

              Добавлено
              Для GetProcAddress() используй MSVC...\Tools\Bin\Depends.Exe, чтобы узнать экспорт. имена
                То Бублик

                1. При директиве __declspec(dllexport) .def файл не нужен.
                2. Нету у меня такой утилиты в студии 9.0

                То arj99

                Это же жесть. Вот такое вот объявление

                ExpandedWrap disabled
                  static __declspec(dllexport) void MyClass::MyFunc(char*, char*, int)

                Превращается вот в это --> ? MyFunc@ MyClass@@SAXPAD0H@Z

                Есть специальная таблица, поясняющая как и что искажается компилятором. Получается, если пишешь длл сам, то вскрываешь либ файл и тянешь имена, а если работаешь с длл стороннего производителя, то сидишь и мучаешься с таблицей, переводя заголовки в имена, присваиваемые компилятором. Это жесть)).
                  таблицу экспорта длл можно просмотреть в почти любом отладчике или прогой Hiew.exe
                      Спасибо всем!
                      Вопрос закрываю.
                      Я думал есть способы обойти поведение компилятора.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,2332 ]   [ 16 queries used ]   [ Generated: 8.08.25, 01:54 GMT ]