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

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

20.01.2011, 21:50. Показов 1405. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru