Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 3
Регистрация: 24.01.2013
Сообщений: 96

Ошибка несовместимости. Как подключить DLL?

18.06.2015, 02:02. Показов 411. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код программы:
Исходный код.сср
C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <glut.h>
#include <math.h>
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <gl\GL.h>
#include <gl\GLU.h>
using namespace std;
#define     PI          3.14159265359
#define n 11
 
typedef void (*fptrInt2)(int, int);
typedef void (*fptrInt3)(int,int, int);
typedef void (*fptrNull)();
int ox=0,oy=0,oz=100;
float           radius  =   50.0; 
 
HMODULE LoadWorldLibrary();
void FreeWorldLibrary(HMODULE world_module);
 
void InitializeGlutWindow(int argc, char** argv);
bool InstallGlutFuncs(HMODULE world_module);
void PerformGlutLoop();
void FreeGlut();
 
int main(int argc, char** argv) {
  InitializeGlutWindow(argc, argv);
 
  HMODULE world_module = LoadWorldLibrary();
  if (world_module) {
    if (InstallGlutFuncs(world_module)) {
      PerformGlutLoop();
    }
 
    FreeWorldLibrary(world_module);
  }
 
  FreeGlut();
 
  return 0;
}
 
void InitializeGlutWindow(int argc, char** argv) {
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(400, 400);
  glutInitWindowPosition(483, 184);
  glutCreateWindow("Prizma");
}
 
HMODULE LoadWorldLibrary() {
  const TCHAR* const kWorldLibrary = TEXT("Win32Project1.dll");
 
  HMODULE world_module = ::LoadLibrary(kWorldLibrary);
  if (!world_module) {
    ::MessageBox(NULL, TEXT("The library ") TEXT(" is not loaded."), TEXT("Foo"), MB_OK);
  }
 
  return world_module;
}
 
void FreeWorldLibrary(HMODULE world_module) {
  FreeLibrary(world_module);
}
bool InstallGlutFuncs(HMODULE world_module) {
  typedef void (* InitializeFunc());
  typedef void (* DisplayFunc());
  typedef void (* MousePresedMoveFunc(int, int));
  typedef void (* SKeyboardFunc(int, int, int));
 
  InitializeFunc* init_func (InitializeFunc);GetProcAddress(world_module, "Initialize");
  DisplayFunc* display_func (DisplayFunc);GetProcAddress(world_module, "Display");
  MousePresedMoveFunc* mouse_presed_move_func (MousePresedMoveFunc);GetProcAddress(world_module, "MousePresedMove");
  SKeyboardFunc* skeyboard_func (SKeyboardFunc);GetProcAddress(world_module, "SKeyboard");
 
 
  bool is_succeeded = init_func && display_func && mouse_presed_move_func && skeyboard_func;
  if (is_succeeded) {
    init_func();
 
    glutMotionFunc(mouse_presed_move_func);
    glutSpecialFunc(skeyboard_func);
    glutDisplayFunc(display_func);
  } else {
    ::MessageBox(NULL, TEXT("Problems with library, can't find functions."), TEXT("Foo"), MB_OK);
  }
 
  return is_succeeded;
}
 
void PerformGlutLoop() {
  glutMainLoop();
}
 
void FreeGlut() {
}
Библиотека DLL с которой должна работать программа:
stdafx.h
C++
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
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#define WIN32_LEAN_AND_MEAN             // Исключите редко используемые компоненты из заголовков Windows
// Файлы заголовков Windows:
#include <windows.h>
 
#ifdef Win32Project1_DLL_EXPORT
#define Win32Project1DLL_GLOBAL  extern "C" __declspec(dllexport)
#else
#define Win32Project1_GLOBAL  extern "C" __declspec(dllimport)
#endif
 
Win32Project1_GLOBAL void Display();
Win32Project1_GLOBAL void MousePresedMove(int x, int y);
Win32Project1_GLOBAL void SKeyboard(int key, int x, int y);
Win32Project1_GLOBAL void Initialize();
 
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
Win32Project1.cpp
C++
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Win32Project1.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include <glut.h>
#include <math.h>
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <gl\GL.h>
#include <gl\GLU.h>
using namespace std;
#define     PI          3.14159265359
#define n 11
 
typedef void (*fptrInt2)(int, int);
typedef void (*fptrInt3)(int,int, int);
typedef void (*fptrNull)();
int ox=0,oy=0,oz=100;
float           radius  =   50.0; 
 
void Display() {
  float           segment =   2*PI / n;
        struct point
        {
            float x,y,z;
        } a[n+1],b[n+1];
        for(int i=0;i<=n;i++){
            float x = radius * sin(i*segment); 
            float y = radius * cos(i*segment); 
            a[i].x=x;
            a[i].y=y;
            a[i].z=oz;
            b[i].x=x;
            b[i].y=y;
            b[i].z=-oz;};
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glPushMatrix();
            glRotatef(90,1,0,0);
            glEnable(GL_DEPTH_TEST);
            glBegin(GL_QUADS);
            for (int i=0;i<n;i++)
            {
                glColor3f(sinf(i),sinf(i+5),sinf(i+2));
                glVertex3f(a[i].x,a[i].y,a[i].z);
                glVertex3f(a[i+1].x,a[i+1].y,a[i+1].z);
                glVertex3f(b[i+1].x,b[i+1].y,b[i+1].z);
                glVertex3f(b[i].x,b[i].y,b[i].z);
            };
            glVertex3f(a[0].x,a[0].y,a[0].z);
            glVertex3f(a[n-1].x,a[n-1].y,a[n-1].z);
            glVertex3f(b[n-1].x,b[n-1].y,b[n-1].z);
            glVertex3f(b[0].x,b[0].y,b[0].z);
            glEnd();
 
            glBegin(GL_LINE_STRIP);
            for(int i=0;i<=n;i++)
            {
                glColor3f(0,0,0);
                glVertex3f(a[i].x,a[i].y,a[i].z);
            };
            glEnd();
            glBegin(GL_LINE_STRIP);
            for(int i=0;i<=n;i++)
            {
                glColor3f(0,0,0);
                glVertex3f(b[i].x,b[i].y,b[i].z);
            }
            glEnd();
            glBegin(GL_LINE_STRIP);
            for (int i=0;i<=n;i++)
            {
                glColor3f(0,0,0);
                glVertex3f(a[i].x,a[i].y,a[i].z);
                glVertex3f(b[i].x,b[i].y,b[i].z);
                glVertex3f(a[i].x,a[i].y,a[i].z);
            }
            glEnd();
            glPopMatrix();
            glutSwapBuffers();
}
 
void MousePresedMove(int x, int y){
  if((x>=0&&x<=400)&&(y>=0&&y<=400))
        {
            glutPostRedisplay();
            glRotatef (x-ox,0,1,0);
            glRotatef (y-oy,-1,0,0);
            ox=x; oy=y;
        }   
}
 
void SKeyboard(int key, int x, int y){
   switch(key)
        {
        case GLUT_KEY_UP: { if (oz!=250) {radius++; oz=oz+2;
            glutPostRedisplay();}}
                          break;
        case GLUT_KEY_DOWN: { if (oz!=0) {radius--; oz=oz-2;
            glutPostRedisplay();}}
                            break;
        }
}
 
void __declspec(dllexport) Initialize(){
   glClearColor(0.0, 0.0, 0.0, 1.0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-200,200,200,-200,-500,500);
        glMatrixMode(GL_MODELVIEW);
//      pMouse = MousePresedMove;
}
В библиотеке вроде всё правильно( ошибок нету ), а в программе выдаёт ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
1>------ Построение начато: проект: Призма, Конфигурация: Debug Win32 ------
1>  Исходный код.cpp
1>c:\users\дима\documents\visual studio 2012\projects\призма\призма\исходный код.cpp(77): warning C4551: в вызове функции отсутствует список аргументов
1>c:\users\дима\documents\visual studio 2012\projects\призма\призма\исходный код.cpp(79): error C2660: init_func: функция не принимает 0 аргументов
1>c:\users\дима\documents\visual studio 2012\projects\призма\призма\исходный код.cpp(81): error C2664: glutMotionFunc: невозможно преобразовать параметр 1 из "MousePresedMoveFunc (__cdecl *(__cdecl *)(MousePresedMoveFunc (__cdecl *)))" в "void (__cdecl *)(int,int)"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>c:\users\дима\documents\visual studio 2012\projects\призма\призма\исходный код.cpp(82): error C2664: glutSpecialFunc: невозможно преобразовать параметр 1 из "SKeyboardFunc (__cdecl *(__cdecl *)(SKeyboardFunc (__cdecl *)))" в "void (__cdecl *)(int,int,int)"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>c:\users\дима\documents\visual studio 2012\projects\призма\призма\исходный код.cpp(83): error C2664: glutDisplayFunc: невозможно преобразовать параметр 1 из "DisplayFunc (__cdecl *(__cdecl *)(DisplayFunc (__cdecl *)))" в "void (__cdecl *)(void)"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено через 10 минут
Попробовал вот так всё равно не получается
C++
1
2
3
4
InitializeFunc init_func = reinterpret_cast<InitializeFunc>(::GetProcAddress(world_module, "Initialize"));
  DisplayFunc display_func = reinterpret_cast<DisplayFunc>(::GetProcAddress(world_module, "Display"));
  MousePresedMoveFunc mouse_presed_move_func = reinterpret_cast<MousePresedMoveFunc>(::GetProcAddress(world_module, "MousePresedMove"));
  SKeyboardFunc skeyboard_func = reinterpret_cast<SKeyboardFunc>(::GetProcAddress(world_module, "SKeyboard"));
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2015, 02:02
Ответы с готовыми решениями:

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

Как подключить dll (SmartCOM3.dll) к php через расширение php_com_dotnet?
Доброе время суток. Передо мной встала задача через php подцепить SmartCOM3.dll. В мануале написано что подцепка dll делается через...

Как при создании своей dll подключить туда сторонние dll
Здравствуйте, я работаю в связке C# - Oracle. Если коротко, то вопрос звучит так: &quot;Как при создании своей dll подключить туда сторонние...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.06.2015, 02:02
Помогаю со студенческими работами здесь

Как подключить свою dll к другой DLL (не своей) с проверкой?
Привет всем. Не знаю куда написать, напишу сюда. Вопрос такой: хочу подключить свою dll к другому dll файлу да так, чтобы была какая-то...

Как подключить ssleay32.dll & libeay32.dll
Всем привет. У меня QT5 Собран статически, но без openssl. Как мне сейчас можно поступить, что бы подключить данные длл для передачи...

Как подключить dll, написанную на C, к dll на Delphi
Добрый день! Нужно подключить dll написанную на C к dll на Delphi. Как это можно сделать и можно ли вообще?

Ошибка несовместимости типов
Имеется такая ошибка, у меня есть свой тип, назовем tMine, а так же есть строка S типа string. tMine= (R, L, U, D); S:= 'RLUD'; так...

Ошибка несовместимости версий бд
Дело вот в чем. Есть бэкап бд, созданный на сервере версии 13.00.4001. Заливаю бэкап на хостинг, пишет , что на хостинге сервак версии...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru