Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ramore
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
#1

DLL на C++ - C++

11.12.2010, 22:12. Просмотров 551. Ответов 6
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчани!
У меня собственно такой вопрос:
Не могли бы Вы написать код для DLL на C++ который нужен для выполнения такого задания - перемножить два беззнаковых числа длиной 64 бита каждое.
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2010, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DLL на C++ (C++):

Добавление своей dll в список dll подгружаемых процессом чужого процесса - C++
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не изменяя структуры файла.

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

Как узнать путь к загруженной DLL из самой DLL? - C++
Создаю небольшую программку в папке c:/test/app/, есть DLL в папке c:/test/dll/. В коде самой dll, после её подгрузки в программу, можно...

Запись из внедренной dll в другую dll этого процесса - C++
main.cpp #include <Windows.h> extern int writeprocess(); DWORD WINAPI MainThread(LPVOID lpParam) { ...

Dll файл в exe файле. Вшить dll libcurl - C++
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

Как узнать зависимость DLL-ки от других DLL-ек? - C++
Есть DLL-ка, она в свою очередь подгружает другие DLL-ки, а так же использует соответственно тулфейн свого компилятора и тд. Есть какая...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
12.12.2010, 08:24 #2
вот тебе пример:
C++
1
2
3
4
5
// p.cpp
int f(int x)
{
    return x*x;
}
C++
1
2
3
4
5
6
7
8
9
// pp.cpp
#include <iostream>
int f(int x);
int main()
{
    int y = f(3);
    std::cout << y << '\n';
    return 0;
}
компилируем, связываем и запускаем:
Код
C:\Documents and Settings\admin\Рабочий стол>g++ -shared -g p.cpp -olibp.dll
C:\Documents and Settings\admin\Рабочий стол>g++ -g pp.cpp -lp -L. -orun
C:\Documents and Settings\admin\Рабочий стол>run
9
C:\Documents and Settings\admin\Рабочий стол>
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
C:\Documents and Settings\admin\Рабочий стол>gdb run
Reading symbols from C:\Documents and Settings\admin\в•Ёрсюўшщ ёЄюы/run.exe...done
.
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
   0x00401318 <+0>:     push   ebp
   0x00401319 <+1>:     mov    ebp,esp
   0x0040131b <+3>:     and    esp,0xfffffff0
   0x0040131e <+6>:     sub    esp,0x20
   0x00401321 <+9>:     call   0x413380 <__main>
   0x00401326 <+14>:    mov    DWORD PTR [esp],0x3
   0x0040132d <+21>:    call   0x41c95c <_Z1fi>
   0x00401332 <+26>:    mov    DWORD PTR [esp+0x1c],eax
   0x00401336 <+30>:    mov    eax,DWORD PTR [esp+0x1c]
   0x0040133a <+34>:    mov    DWORD PTR [esp+0x4],eax
   0x0040133e <+38>:    mov    DWORD PTR [esp],0x4740c0
   0x00401345 <+45>:    call   0x4485a8 <_ZNSolsEi>
   0x0040134a <+50>:    mov    DWORD PTR [esp+0x4],0xa
   0x00401352 <+58>:    mov    DWORD PTR [esp],eax
   0x00401355 <+61>:    call   0x4696d8 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_c>
   0x0040135a <+66>:    mov    eax,0x0
   0x0040135f <+71>:    leave
   0x00401360 <+72>:    ret
End of assembler dump.
(gdb) disas f
Dump of assembler code for function _Z1fi:
   0x0041c95c <+0>:     jmp    DWORD PTR ds:0x47b35c
   0x0041c962 <+6>:     nop
   0x0041c963 <+7>:     nop
End of assembler dump.
(gdb)
видно, что тело функции f не включено в исполняемый файл программы.
1
Ramore
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
13.12.2010, 01:59  [ТС] #3
а Вы не могли бы обьяснить поподробней что это за код Bash?
я просто новичок во всем этом, но для умножения 2-х чисел такой сложный алгоритм?
это связано с тем что числа 64-х битные??
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.12.2010, 02:10 #4
Цитата Сообщение от Ramore Посмотреть сообщение
а Вы не могли бы обьяснить поподробней что это за код Bash?
Это просто вывод консоли, оформленный в тэге BASH.

Цитата Сообщение от Ramore Посмотреть сообщение
для умножения 2-х чисел такой сложный алгоритм?
Для вычисления алгоритм простой:
Цитата Сообщение от Aye Aye Посмотреть сообщение
int f(int x)
{
return x*x;
}
Все остальное -- компиляция DLL и непосредственно программы, плюс дебаг, чтобы показать, что в коде программы нет кода, вычисляющего квадрат числа, а он находится в DLL. (Да-да, тут не ваша задача, а пример аналогичной, но возвращающей квадрат числа со знаком, скорее всего 32-х битного.)
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
13.12.2010, 18:54 #5
а 64 битные целые без знака можно так посчитать:
C++
1
2
3
4
unsigned long long int ullimul(unsigned long long int x, unsigned long long int y)
{
    return x * y;
}
на моей машине тип long long int занимает 64 бита. Вот и все.
1
Ramore
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
13.12.2010, 22:43  [ТС] #6
Так получается, мне не надо писать то что находится в области кода Bash?
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
13.12.2010, 22:49 #7
Да, просто надо правильно собрать. Мух отдельно, котлеты отдельно.

Не по теме:

Цитата Сообщение от Aye Aye Посмотреть сообщение
а 64 битные целые без знака можно так посчитать:
C++
1
2
3
4
unsigned long long int ullimul(unsigned long long int x, unsigned long long int y)
{
    return x * y;
}
на моей машине тип long long int занимает 64 бита. Вот и все.
c++0x гарантирует long long'у 64 бит.

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 22:49
Привет! Вот еще темы с ответами:

Обращение к ресурсам DLL из самой DLL - C++
Коллеги, добрый день. Получил следующее задание - Создать библиотеку, DLL назначение которой, выполнить экспорт некоторой функции, в...

Вызов Dll-фий в другой Dll - C++
не получается дернуть dll в другой dll. Подскажите, как должен происходить вызов dll1 в dll2 ? (псевдокод) dll1.cpp { int...

Как подключить dll на C# к проекту (dll) на С++ - C++
Подскажите, пожалуйста, как подключить dll на C# к проекту (dll) на С++. В интернете много примеров, где показаны примеры по подключению...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.12.2010, 22:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru