С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для AndyHell
5 / 5 / 3
Регистрация: 18.04.2010
Сообщений: 20

Ошибка DLL в Release версии приложения

20.01.2011, 21:50. Показов 1408. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я написал DLL hiper.dll, подключил её к своему приложению через LoadLibrary. В Debug версии всё работает отлично! Но в Release версии выдает ошибку: Access violation at address 00405023 in module 'Project1.exe'. Write of address 41C80000.

Никто с таким не сталкивался? Как решить проблему?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2011, 21:50
Ответы с готовыми решениями:

Перестает работать вывод в консоль в Release версии dll
компилю dll в Release версию и после того как отключаю длл от проги и снова подключаю перестает работать вывод в консоль, хотя все...

Ошибка с msvcp120d.dll. Как создать Release?
Перенес готовый консольный проект на другой компьютер и при запуске выдает такую ошибку Запуск программы не возможен, так как на...

Ошибка при запуске Release-сборки приложения
Здравствуйте! напишите пожалуйста подробный гайд, как делать рабочее exe сразу после компиляции? Проект перевел в Release, Создание...

2
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
20.01.2011, 22:14
AndyHell, ошибка в 13-ой строчке
Ответьте пожалуйста на вопрос, как мы можем вам помочь, если вы что-то написали, а мы ваших ошибок не видим?
Экстрасенсы в отпуск ушли.... Думаю, намёк более чем понятен
0
 Аватар для AndyHell
5 / 5 / 3
Регистрация: 18.04.2010
Сообщений: 20
21.01.2011, 09:47  [ТС]
Лучший ответ Сообщение было отмечено AndyHell как решение

Решение

Извините, вот листинг

hiper.dll

File1.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
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
//   Important note about DLL memory management when your DLL uses the
//   static version of the RunTime Library:
//
//   If your DLL exports any functions that pass String objects (or structs/
//   classes containing nested Strings) as parameter or function results,
//   you will need to add the library MEMMGR.LIB to both the DLL project and
//   any other projects that use the DLL.  You will also need to use MEMMGR.LIB
//   if any other projects which use the DLL will be performing new or delete
//   operations on any non-TObject-derived classes which are exported from the
//   DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
//   EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
//   the file BORLNDMM.DLL should be deployed along with your DLL.
//
//   To avoid using BORLNDMM.DLL, pass string information using "char *" or
//   ShortString parameters.
//
//   If your DLL uses the dynamic version of the RTL, you do not need to
//   explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------
 
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
File2.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
#include "fDLL.h"
#include "math.h"
//---------------------------------------------------------------------------
float bOne (float x[], float y[], int n)
{
    float s1=0,s2=0,s3=0,s4=0,b1;
    for(int i=1;i<n;i++)
    {
        s1 = s1 + y[i]/x[i];
        s2 = s2 + y[i];
        s3 = s3 + 1/x[i];
        s4 = s4 + 1/(x[i]*x[i]);
    }
    b1 = (n*s1-s2*s3)/(n*s4-s3*s3);
    return b1;
}
float bZero (float x[], float y[], int n, float b1)
{
    float s1=0,s2=0,s3=0,b0;
    for(int i=1;i<n;i++)
    {
        s1 = s1 + y[i]/x[i];
        s2 = s2 + 1/(x[i]*x[i]);
        s3 = s3 + 1/x[i];
 
    }
    b0 = (s1-b1*s2)/s3;
    return b0;
}
float Pogresh (float b0, float b1, float y[], int n)
{
   float dl1[100], max, yp[100];
    for(int i=1;i<n;i++)
    {
    yp[i]= b1*y[i]+b0;
    dl1[i]=fabs((y[i] - yp[i])/yp[i]);
    if(dl1[i]>dl1[i-1])
    max= dl1[i];
    }
    return max;
}
fDLL.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Файл заголовка - fDLL.h
#ifndef __ fDLL _H
#define __ fDLL _H
 
#if defined(__cplusplus)
extern "C"
{
#endif
__declspec(dllexport) float bOne (float x[], float y[], int n);
__declspec(dllexport) float bZero (float x[], float y[], int n, float b1);
__declspec(dllexport) float Pogresh (float b0, float b1, float y[], int n);
#if defined(__cplusplus)
}
#endif
 
#endif //__dDLL _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
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
//My DLL
typedef float (*BONE)(float x[], float y[], int n);
BONE bOne;
typedef float (*BZERO)(float x[], float y[], int n, float b1);
BZERO bZero;
typedef float (*POGRESH)(float b0, float b1, float y[], int n);
POGRESH Pogresh;
 
 
//button1click
DllHandle=LoadLibrary("dll/hiper.dll");
 if(DllHandle)
 {
 Application->MessageBoxA(L"HiperMY.DLL подключен!",L"Внимание", MB_OK | MB_ICONINFORMATION);
 }
 else
 {
 Application->MessageBoxA(L"HiperMY.DLL не найден!",L"Ошибка", MB_OK | MB_ICONERROR);
 }
 if(DllHandle)
  {
   bOne=(BONE)GetProcAddress(DllHandle,"_bOne");
   bZero=(BZERO)GetProcAddress(DllHandle,"_bZero");
   Pogresh=(POGRESH)GetProcAddress(DllHandle,"_Pogresh");
  }
 
float x[25], y[25], y1[25], b1, b0, max, b11, b01, max1;
int r;
for (int i=1; i < Data->RowCount; i++)
{
  x[i]=StrToFloat(Data->Cells[0][i]);
  y[i]=StrToFloat(Data->Cells[1][i]);
  y1[i]=StrToFloat(Data->Cells[2][i]);
}
r=Data->RowCount;
b1=bOne(x,y,r);
b0=bZero(x,y,r,b1);
max=Pogresh(b0,b1,y,r);
Label3->Caption="Погрешность гиперболического метода равна " + FloatToStr(max);
//Form7->Series1->AddXY(2,max);
 
b11=bOne(x,y1,r);
b01=bZero(x,y1,r,b11);
max1=Pogresh(b01,b11,y1,r);
 
//for (int i=1; i < Data->RowCount; i++)
//{
//Series1->AddXY(x[i],b0+b1/x[i]);
//Series4->AddXY(x[i],b01+b11/x[i]);
//}
FreeLibrary(DllHandle);
Добавлено через 9 часов 12 минут
Решил проблему расписав цикл
C++
1
2
3
4
5
6
for (int i=1; i < Data->RowCount; i++)
{
  x[i]=StrToFloat(Data->Cells[0][i]);
  y[i]=StrToFloat(Data->Cells[1][i]);
  y1[i]=StrToFloat(Data->Cells[2][i]);
}
на 3 цикла
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=1; i < Data->RowCount; i++)
{
  x[i]=StrToFloat(Data->Cells[0][i]);
}
for (int i=1; i < Data->RowCount; i++)
{
  y[i]=StrToFloat(Data->Cells[1][i]);
}
for (int i=1; i < Data->RowCount; i++)
{
  y1[i]=StrToFloat(Data->Cells[2][i]);
}
Но не понятно почему цикл нормально работал в Debug, и выдавал ошибку в Release
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2011, 09:47
Помогаю со студенческими работами здесь

borlndmm.dll 6-ой версии - ошибка ?
Есть некоторый софт, работает с использованием borlndmm.dll При использовании функции FreeLibrary возникает ошибка обращения к памяти по...

Таймер не работает в Release версии
Написал я курсач, но всё пашет только при запуске приложения из Visual Studio. После того, как я перевёл всё в exe`шник и запустил его...

Сбой только в Release-версии. Почему?
Может, кто-то сталкивался с такой проблемой: Во время работы Release-версии приложения при его запуске из Windows ('98) происходит сбой...

Сбор release версии программы с++, на MinGW
Есть такая проблема: компилирую программу из под Windows 7, на MinGW g++ -o test.exe test.cpp например. Я не пользуюсь средами, так...

Файл myprojectname.pdb в каталоге Release версии !
Как убрать вездесущий файл расширения &quot;.pdb&quot; из визуал стидии в настройках. Он мне не очень мешает, к тому же важно знать с эстетической...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru