Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798

DLL - как подменить функцию, используя самодельную DLL?

02.08.2016, 16:33. Показов 1480. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа (только exe), которая при определенном событии воспроизводит звук из файла, используя для этого DirectSound. Конкретно - есть обращение к библиотеке dsound.dll к единственной функции 001 (это DirectSoundCreate). Я хочу написать свою dll со сходным именем (не dsound.dll, а dsounn.dll) и в такой же функции обращаться к оригинальной библиотеке, при этом совершая еще какие-нибудь дополнительные действия. В программе я заменил имя (dsound на dsounn) и, подставляя свою библиотеку, дополнительные действия осуществляются..., - нет только нормальной обработки запроса; программа сваливается на "исключение" 0xC0000005. Как такую подстановку сделать правильно?
В моих опытах это выглядит так__
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------- Unit1.cpp -----------------------------------------
#include <vcl.h>
#include <mmsystem.h>
#include "dsound.h"
#include "Unit1.h" 
//--------------------------------------------------------------------------
extern "C"           //  ..\_res\resurs.rc    dsounn.def
{
// void __declspec(dllexport) DirectSoundCreato(LPGUID G1, LPDIRECTSOUND *G2, LPUNKNOWN G3)
 void __cdecl DirectSoundCreato(LPGUID Y1, LPDIRECTSOUND *Y2, LPUNKNOWN Y3)
  {
    DirectSoundCreate(Y1, Y2, Y3) ;
//    ShowMessage("Sound Initial!") ;
  }
  
 void __cdecl On_Exit()  { ; }
}
//--------------------------------------------------------------------------
В файле dsound.h эта функция...
C++
1
extern HRESULT WINAPI DirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.08.2016, 16:33
Ответы с готовыми решениями:

Подскажите, как вызвать в основном файле функцию из .dll, используя функции WinAPI
Привет всем. Подскажите, пожалуйста, как вызвать функцию, определение которой находится в подключаемой .dll библиотеке с помощью функций...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

За какую функцию отвечают user32.dll,kernel32,winmm.dll
Помогите мне пожалуйста,разобратся с этими DLLками. Если есть где можно скачать матерьял,буду премного благодарен.

2
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.08.2016, 19:37  [ТС]
Более внимательное изучение "объекта подражания" натолкнуло на мысль видоизменить текст__
C++
1
2
3
4
5
6
7
8
9
10
11
12
extern "C"          
{
 HRESULT __stdcall DirectSoundCreato(LPGUID Y1, LPDIRECTSOUND *Y2, LPUNKNOWN Y3)
  {
    ShowMessage("Sound Initial!");
 
    HRESULT rZ = DirectSoundCreate( Y1, Y2, Y3 );
    return rZ;
  }
 
 void __stdcall On_Exit()  { ; }
}
- stdcall вместо cdecl; сейчас ошибка не возникает, а доп.сообщение появляется при запуске. По поводу DLL параллельно есть еще вопросы, но чего ж я буду их сам себе задавать?...
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
06.08.2016, 22:01
Цитата Сообщение от nick42 Посмотреть сообщение
я буду их сам себе задавать?
Я просто на столько не шарю, зато могу рассказать смешной анекдот про гаишника, для моральной поддержки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2016, 22:01
Помогаю со студенческими работами здесь

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll, libmysqld50.dll, libmysqld51.dll. Но я нигде...

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу перевод буржуйской вики по отлучению...

Как притулить метод на выполнение с DLL , без ошибочного завершения как DLL не будет c EXE
Как притулить метод на выполнение с DLL , без ошибочного завершения как DLL не будет c EXE using System; using...

Как использовать методы библиотеки DLL, и игнорировать их, когда DLL нету?
Как использовать методы библиотеки DLL , и игнорировать их когда DLL нету Что нужно , мне нужно так чтоб проверялось наличие библиотеки ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru