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

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

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

DLL на C++ - C++

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

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

DLL C++
dLL C++
C++ dll?
DLL C++
Работа с DLL C++
Подключить dll C++
C++ dll и h
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
12.12.2010, 08:24     DLL на C++ #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 не включено в исполняемый файл программы.
Ramore
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
13.12.2010, 01:59  [ТС]     DLL на C++ #3
а Вы не могли бы обьяснить поподробней что это за код Bash?
я просто новичок во всем этом, но для умножения 2-х чисел такой сложный алгоритм?
это связано с тем что числа 64-х битные??
lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 02:10     DLL на C++ #4
Цитата Сообщение от Ramore Посмотреть сообщение
а Вы не могли бы обьяснить поподробней что это за код Bash?
Это просто вывод консоли, оформленный в тэге BASH.

Цитата Сообщение от Ramore Посмотреть сообщение
для умножения 2-х чисел такой сложный алгоритм?
Для вычисления алгоритм простой:
Цитата Сообщение от Aye Aye Посмотреть сообщение
int f(int x)
{
return x*x;
}
Все остальное -- компиляция DLL и непосредственно программы, плюс дебаг, чтобы показать, что в коде программы нет кода, вычисляющего квадрат числа, а он находится в DLL. (Да-да, тут не ваша задача, а пример аналогичной, но возвращающей квадрат числа со знаком, скорее всего 32-х битного.)
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
13.12.2010, 18:54     DLL на C++ #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 бита. Вот и все.
Ramore
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 5
13.12.2010, 22:43  [ТС]     DLL на C++ #6
Так получается, мне не надо писать то что находится в области кода Bash?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2010, 22:49     DLL на C++
Еще ссылки по теме:

C++ dll
Загрузка 32 bit DLL в 64 bit DLL C++
C++ Dll C++ В С#
C++ Использование dll в c++
Dll C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
2915 / 1344 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
13.12.2010, 22:49     DLL на C++ #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 бит.

Yandex
Объявления
13.12.2010, 22:49     DLL на C++
Ответ Создать тему
Опции темы

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