Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38

Не компилируется программа при попытке вызова функции из Unit1 в Unit2

27.04.2015, 14:26. Показов 1559. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пишу программу, которая должна считывать данные с АЦП и обрабатывать определенным методом. Код считывание с АЦП предоставляет производитель. Мне нужно сделать так чтобы по нажатию кнопки в одном модуле вызывалась функция из другого модуля.

Unit1 (тут реализовано считывание из АЦП)
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
//#pragma package(smart_init)
//******************************************************************************
// Модуль E14-140.
// Консольная программа с организацией потокового ввода данных с АЦП
// с одновременной записью получаемых данных на диск в реальном масштабе времени.
// Ввод осуществляется с первых четырёх каналов АЦП на частоте 100 кГц.
//******************************************************************************
#include <stdio.h>
#include <conio.h>
#include "Lusbapi.h"
 
// аварийный выход из программы
void AbortProgram(char *ErrorString, bool AbortionFlag = true);
// функция потока ввода данных с АЦП
DWORD WINAPI ServiceReadThread(PVOID /*Context*/);
// функция вывода сообщений с ошибками
void ShowThreadErrorMessage(void);
 
// идентификатор файла
HANDLE hFile;
 
// идентификатор потока сбора данных
HANDLE hReadThread;
DWORD ReadTid;
const WORD ChanAmnt = 04;
// версия библиотеки
DWORD DllVersion;
// указатель на интерфейс модуля
ILE140 *pModule;
// дескриптор устройства
HANDLE ModuleHandle;
// название модуля
char ModuleName[7];
// скорость работы шины USB
BYTE UsbSpeed;
// структура с полной информацией о модуле
MODULE_DESCRIPTION_E140 ModuleDescription;
    // структура параметров работы АЦП модуля
ADC_PARS_E140 ap;
 
// кол-во получаемых отсчетов (кратное 32) для Ф. ReadData()
DWORD DataStep = 32*500;
// будем собирать NDataBlock блоков по DataStep отсчётов в каждом
const WORD NDataBlock = 80;
// буфер данных
SHORT *ReadBuffer;
 
// флажок завершения работы потока сбора данных
bool IsReadThreadComplete;
// номер ошибки при выполнении сбора данных
WORD ReadThreadErrorNumber;
 
// экранный счетчик-индикатор
DWORD Counter = 0x0, OldCounter = 0xFFFFFFFF;
 
//------------------------------------------------------------------------
// основная программа
//------------------------------------------------------------------------
void ReadADC(void)
{
    WORD i;
//  WORD DacSample;
 
    // сбросим флажок завершения потока ввода данных
    IsReadThreadComplete = false;
    // пока ничего не выделено под буфер данных
    ReadBuffer = NULL;
    // пока не создан поток ввода данных
    hReadThread = NULL;
    // пока откытого файла нет :(
    hFile = INVALID_HANDLE_VALUE;
    // сбросим флаг ошибок потока ввода данных
    ReadThreadErrorNumber = 0x0;
 
    // зачистим экран монитора
    clrscr();
 
 
    // проверим версию используемой библиотеки Lusbapi.dll
    if((DllVersion = GetDllVersion()) != CURRENT_VERSION_LUSBAPI)
    {
        char String[128];
        sprintf(String, " Lusbapi.dll Version Error!!!\n   Current: %1u.%1u. Required: %1u.%1u",
                                            DllVersion >> 0x10, DllVersion & 0xFFFF,
                                            CURRENT_VERSION_LUSBAPI >> 0x10, CURRENT_VERSION_LUSBAPI & 0xFFFF);
 
        AbortProgram(String);
    }
    else printf(" Lusbapi.dll Version --> OK\n");
 
    // попробуем получить указатель на интерфейс
    pModule = static_cast<ILE140 *>(CreateLInstance("e140"));
    if(!pModule) AbortProgram(" Module Interface --> Bad\n");
    else printf(" Module Interface --> OK\n");
 
    // попробуем обнаружить модуль E14-140 в первых MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI виртуальных слотах
    for(i = 0x0; i < MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI; i++) if(pModule->OpenLDevice(i)) break;
    // что-нибудь обнаружили?
    if(i == MAX_VIRTUAL_SLOTS_QUANTITY_LUSBAPI) AbortProgram(" Can't find any module E14-140 in first 127 virtual slots!\n");
    else printf(" OpenLDevice(%u) --> OK\n", i);
 
    // попробуем прочитать дескриптор устройства
    ModuleHandle = pModule->GetModuleHandle();
    if(ModuleHandle == INVALID_HANDLE_VALUE) AbortProgram(" GetModuleHandle() --> Bad\n");
    else printf(" GetModuleHandle() --> OK\n");
 
    // прочитаем название модуля в обнаруженном виртуальном слоте
    if(!pModule->GetModuleName(ModuleName)) AbortProgram(" GetModuleName() --> Bad\n");
    else printf(" GetModuleName() --> OK\n");
    // проверим, что это 'E14-140'
    if(strcmp(ModuleName, "E140")) AbortProgram(" The module is not 'E14-140'\n");
    else printf(" The module is 'E14-140'\n");
 
    // попробуем получить скорость работы шины USB
    if(!pModule->GetUsbSpeed(&UsbSpeed)) AbortProgram(" GetUsbSpeed() --> Bad\n");
    else printf(" GetUsbSpeed() --> OK\n");
    // теперь отобразим скорость работы шины USB
    printf("   USB is in %s\n", UsbSpeed ? "High-Speed Mode (480 Mbit/s)" : "Full-Speed Mode (12 Mbit/s)");
 
    // получим информацию из ППЗУ модуля
    if(!pModule->GET_MODULE_DESCRIPTION(&ModuleDescription)) AbortProgram(" GET_MODULE_DESCRIPTION() --> Bad\n");
    else printf(" GET_MODULE_DESCRIPTION() --> OK\n");
 
    // проверим прошивку MCU модуля
    if((ModuleDescription.Module.Revision == REVISIONS_E140[REVISION_B_E140]) &&
        (strtod((char *)ModuleDescription.Mcu.Version.Version, NULL) < 3.05)) AbortProgram(" For module E14-140(Rev.'B') firmware version must be 3.5 or above --> !!! ERROR !!!\n");
 
    // получим текущие параметры работы АЦП
    if(!pModule->GET_ADC_PARS(&ap)) AbortProgram(" GET_ADC_PARS() --> Bad\n");
    else printf(" GET_ADC_PARS() --> OK\n");
    // установим желаемые параметры работы АЦП
    ap.ClkSource = INT_ADC_CLOCK_E140;                          // внутренний запуск АЦП
    ap.EnableClkOutput = ADC_CLOCK_TRANS_DISABLED_E140;     // без трансляции тактовых импульсо АЦП
    ap.InputMode = NO_SYNC_E140;                // без синхронизации ввода данных
    ap.ChannelsQuantity = 0x4;                  // четыре активных канала
    // формируем управляющую таблицу
    for(i = 0x0; i < ap.ChannelsQuantity; i++)
        ap.ControlTable[i] = (WORD)(i | (ADC_INPUT_RANGE_2500mV_E140 << 0x6));
    ap.AdcRate = 100.0;                         // частота работы АЦП в кГц
    ap.InterKadrDelay = 0.0;                    // межкадровая задержка в мс
    // передадим требуемые параметры работы АЦП в модуль
    if(!pModule->SET_ADC_PARS(&ap)) AbortProgram(" SET_ADC_PARS() --> Bad\n");
    else printf(" SET_ADC_PARS() --> OK\n");
 
    // выделим память под буфер
    ReadBuffer = new SHORT[2*DataStep];
    if(!ReadBuffer) AbortProgram(" Can not allocate memory\n");
 
 
 
    // Создаём и запускаем поток сбора данных
    printf(" \n");
    hReadThread = CreateThread(0, 0x2000, ServiceReadThread, 0, 0, &ReadTid);
    if(!hReadThread) AbortProgram(" ServiceReadThread() --> Bad\n");
    else printf(" ServiceReadThread() --> OK\n");
 
    // отобразим параметры сбора данных модуля на экране монитора
    printf(" \n");
    printf(" Module E14-140 (S/N %s) is ready ... \n", ModuleDescription.Module.SerialNumber);
    printf("   Module Info:\n");
    printf("     Module  Revision   is '%c'\n", ModuleDescription.Module.Revision);
    printf("     MCU Driver Version is %s (%s)\n", ModuleDescription.Mcu.Version.Version, ModuleDescription.Mcu.Version.Date);
    printf("   Adc parameters:\n");
    printf("     ChannelsQuantity = %2d\n", ap.ChannelsQuantity);
    printf("     AdcRate = %8.3f kHz\n", ap.AdcRate);
    printf("     InterKadrDelay = %2.4f ms\n", ap.InterKadrDelay);
    printf("     KadrRate = %8.3f kHz\n", ap.KadrRate);
 
    // цикл записи получаемых данных и ожидания окончания работы приложения
//  DacSample = 0x1000;
    printf("\n Press any key if you want to terminate this program...\n\n");
    while(!IsReadThreadComplete)
    {
        if(OldCounter != Counter) { printf(" Counter %3u from %3u\r", Counter, NDataBlock); OldCounter = Counter; }
        else Sleep(20);
//      if(!pModule->ENABLE_TTL_OUT(TRUE)) AbortProgram(" Ошибка разрешения выходных цифровых линий");
//      if(!pModule->TTL_OUT(0xFFFF)) AbortProgram(" Ошибка установки выходных цифровых линий");
//      if(!pModule->TTL_OUT(0x0000)) AbortProgram(" Ошибка установки выходных цифровых линий");
//      if(!pModule->DAC_SAMPLE((SHORT *)&DacSample, 0x0)) AbortProgram(" Ошибка установки канала ЦАП");
    }
 
    // ждём окончания работы потока ввода данных
    WaitForSingleObject(hReadThread, INFINITE);
 
    // проверим была ли ошибка выполнения потока сбора данных
    printf("\n\n");
    if(ReadThreadErrorNumber) { AbortProgram(NULL, false); ShowThreadErrorMessage(); }
    else AbortProgram(" The program was completed successfully!!!\n", false);
}
 
//------------------------------------------------------------------------
// Поток, в котором осуществляется сбор данных
//------------------------------------------------------------------------
DWORD WINAPI ServiceReadThread(PVOID /*Context*/)
{
    WORD i;
    WORD RequestNumber;
    DWORD FileBytesWritten;
    // массив OVERLAPPED структур из двух элементов
    OVERLAPPED ReadOv[2];
    // массив структур с параметрами запроса на ввод/вывод данных
    IO_REQUEST_LUSBAPI IoReq[2];
 
    // остановим работу АЦП и одновременно сбросим USB-канал чтения данных
    if(!pModule->STOP_ADC()) { ReadThreadErrorNumber = 0x1; IsReadThreadComplete = true; return 0x0; }
 
    // формируем необходимые для сбора данных структуры
    for(i = 0x0; i < 0x2; i++)
    {
        // инициализация структуры типа OVERLAPPED
        ZeroMemory(&ReadOv[i], sizeof(OVERLAPPED));
        // создаём событие для асинхронного запроса
        ReadOv[i].hEvent = CreateEvent(NULL, FALSE , FALSE, NULL);
        // формируем структуру IoReq
        IoReq[i].Buffer = ReadBuffer + i*DataStep;
        IoReq[i].NumberOfWordsToPass = DataStep;
        IoReq[i].NumberOfWordsPassed = 0x0;
        IoReq[i].Overlapped = &ReadOv[i];
        IoReq[i].TimeOut = DataStep/ap.AdcRate + 1000;
    }
 
    // делаем предварительный запрос на ввод данных
    RequestNumber = 0x0;
    if(!pModule->ReadData(&IoReq[RequestNumber])) { CloseHandle(ReadOv[0].hEvent); CloseHandle(ReadOv[1].hEvent); ReadThreadErrorNumber = 0x2; IsReadThreadComplete = true; return 0x0; }
 
    // запустим АЦП
    if(pModule->START_ADC())
    {
        // цикл сбора данных
        for(i = 0x1; i < NDataBlock; i++)
        {
            // сделаем запрос на очередную порцию данных
            RequestNumber ^= 0x1;
            if(!pModule->ReadData(&IoReq[RequestNumber])) { ReadThreadErrorNumber = 0x2; break; }
            if(ReadThreadErrorNumber) break;
 
            // ждём завершения операции сбора предыдущей порции данных
            if(WaitForSingleObject(ReadOv[RequestNumber^0x1].hEvent, IoReq[RequestNumber^0x1].TimeOut) == WAIT_TIMEOUT) { ReadThreadErrorNumber = 0x3; break; }
            if(ReadThreadErrorNumber) break;
 
            // запишем полученную порцию данных в файл
            if(!WriteFile(  hFile,                                                  // handle to file to write to
                                IoReq[RequestNumber^0x1].Buffer,                    // pointer to data to write to file
                                2*DataStep,                                             // number of bytes to write
                                &FileBytesWritten,                                  // pointer to number of bytes written
                            NULL                                                        // pointer to structure needed for overlapped I/O
                               )) { ReadThreadErrorNumber = 0x4; break; }
 
            if(ReadThreadErrorNumber) break;
            else if(kbhit()) { ReadThreadErrorNumber = 0x5; break; }
            else Sleep(20);
            Counter++;
        }
 
        // последняя порция данных
        if(!ReadThreadErrorNumber)
        {
            RequestNumber ^= 0x1;
            // ждём окончания операции сбора последней порции данных
            if(WaitForSingleObject(ReadOv[RequestNumber^0x1].hEvent, IoReq[RequestNumber^0x1].TimeOut) == WAIT_TIMEOUT) ReadThreadErrorNumber = 0x3;
            // запишем последнюю порцию данных в файл
            if(!WriteFile(  hFile,                                                  // handle to file to write to
                                IoReq[RequestNumber^0x1].Buffer,                    // pointer to data to write to file
                                2*DataStep,                                             // number of bytes to write
                                &FileBytesWritten,                                  // pointer to number of bytes written
                            NULL                                                        // pointer to structure needed for overlapped I/O
                               )) ReadThreadErrorNumber = 0x4;
            Counter++;
        }
    }
    else { ReadThreadErrorNumber = 0x6; }
 
    // остановим работу АЦП
    if(!pModule->STOP_ADC()) ReadThreadErrorNumber = 0x1;
    // прервём возможно незавершённый асинхронный запрос на приём данных
    if(!CancelIo(ModuleHandle)) { ReadThreadErrorNumber = 0x7; }
    // освободим все идентификаторы событий
    for(i = 0x0; i < 0x2; i++) CloseHandle(ReadOv[i].hEvent);
    // небольшая задержка
    Sleep(100);
    // установим флажок завершения работы потока сбора данных
    IsReadThreadComplete = true;
    // теперь можно спокойно выходить из потока
    return 0x0;
}
 
//------------------------------------------------------------------------
// Отобразим сообщение с ошибкой
//------------------------------------------------------------------------
void ShowThreadErrorMessage(void)
{
    switch(ReadThreadErrorNumber)
    {
        case 0x1:
            printf(" ADC Thread: STOP_ADC() --> Bad\n");
            break;
 
        case 0x2:
            printf(" ADC Thread: ReadData() --> Bad\n");
            break;
 
        case 0x3:
            printf(" ADC Thread: Timeout is occured!\n");
            break;
 
        case 0x4:
            printf(" ADC Thread: Writing data file error!\n");
            break;
 
        case 0x5:
            // если программа была злобно прервана, предъявим ноту протеста
            printf(" ADC Thread: The program was terminated!\n");
            break;
 
        case 0x6:
            printf(" ADC Thread: START_ADC() --> Bad\n");
            break;
 
        case 0x7:
            printf(" ADC Thread: Can't cancel ending input and output (I/O) operations!\n");
            break;
 
        default:
            printf(" Unknown error!\n");
            break;
    }
 
    return;
}

Unit5 (в который нужно вызвать функцию)

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
 #include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit5.h"
#include "Unit3.h"
#include "Unit2.h"
 
#include "Lusbapi.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;
 
// указатель на интерфейс модуля
extern ILE140 *pModule;
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button3Click(TObject *Sender)
{
    Form5->Close();
}
//---------------------------------------------------------------------------
 
 
 
//---------------------------------------------------------------------------
 
 
void __fastcall TForm5::Button1Click(TObject *Sender)
{
 Memo1->Text="***";
 ReadADC();
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2015, 14:26
Ответы с готовыми решениями:

Перенести функции и процедуры в Unit2, и подключить к Unit1
Помогите пожалуйста, перенести процедуры и функции которые находятся в {фигурных скобках} во второй юнит, и подключить к первому.Спасибо

Вызов unit2 при нажатии на кнопку в unit1
столкнулся с проблемой как прописать в кнопку в unit1 что бы при нажатии появлялся unit2 . Т.е мы при нажатии вызываем еще одну форму! как...

Visual Basic вылетает с ошибкой при попытке вызова функции из DLL
Declare Function testdll Lib &quot;cfg.dll&quot; () As String Private Sub Form_Load() Me.Caption = testdll() End Sub сама dll...

14
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
27.04.2015, 14:30
Ну и подключите его. Где у вас #include "Unit1.cpp" ?
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
27.04.2015, 14:32  [ТС]
Я так в начале сделал, но потом прочел что это не правильно и нужно headerы подключать

Если подключить cpp, то начинает ругаться на многократное объявление переменных
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
27.04.2015, 14:33
В Unit1.h добавить
C++
1
void ReadADC(void);
, эта функция сразу станет доступна из любого модуля, к которому Unit1.h подключен.
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
27.04.2015, 15:41  [ТС]
Уже и это сделано, я прежде все таки почитал форумы. Неделю с этой гадостью борюсь.

Добавлено через 1 час 4 минуты
Это Event Log при компиляции. все что выдает. Такое ощущение что компиляция просто прерывается

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
Thread Start: Thread ID: 7084. Process Project1.exe (4280)
Process Start: G:\akron\lazer\.\Win32\Debug\Project1.exe. Base Address: $00400000. Process Project1.exe (4280)
Module Load: Project1.exe. Has Debug Info. Base Address: $00400000. Process Project1.exe (4280)
Module Load: ntdll.dll. No Debug Info. Base Address: $77380000. Process Project1.exe (4280)
Module Load: KERNEL32.dll. No Debug Info. Base Address: $75F80000. Process Project1.exe (4280)
Module Load: KERNELBASE.dll. No Debug Info. Base Address: $76B50000. Process Project1.exe (4280)
Module Load: rtl190.bpl. No Debug Info. Base Address: $50050000. Process Project1.exe (4280)
Module Load: OLEAUT32.dll. No Debug Info. Base Address: $76BA0000. Process Project1.exe (4280)
Module Load: ole32.dll. No Debug Info. Base Address: $76E20000. Process Project1.exe (4280)
Module Load: msvcrt.dll. No Debug Info. Base Address: $75D20000. Process Project1.exe (4280)
Module Load: GDI32.dll. No Debug Info. Base Address: $75C20000. Process Project1.exe (4280)
Module Load: USER32.dll. No Debug Info. Base Address: $75E20000. Process Project1.exe (4280)
Module Load: ADVAPI32.dll. No Debug Info. Base Address: $763D0000. Process Project1.exe (4280)
Module Load: SECHOST.dll. No Debug Info. Base Address: $76C30000. Process Project1.exe (4280)
Module Load: RPCRT4.dll. No Debug Info. Base Address: $767C0000. Process Project1.exe (4280)
Module Load: SspiCli.dll. No Debug Info. Base Address: $74EE0000. Process Project1.exe (4280)
Module Load: CRYPTBASE.dll. No Debug Info. Base Address: $74ED0000. Process Project1.exe (4280)
Module Load: LPK.dll. No Debug Info. Base Address: $75CB0000. Process Project1.exe (4280)
Module Load: USP10.dll. No Debug Info. Base Address: $76660000. Process Project1.exe (4280)
Module Load: VERSION.dll. No Debug Info. Base Address: $6FE20000. Process Project1.exe (4280)
Module Load: MPR.dll. No Debug Info. Base Address: $72FC0000. Process Project1.exe (4280)
Module Load: imagehlp.dll. No Debug Info. Base Address: $76790000. Process Project1.exe (4280)
Module Load: SHFOLDER.dll. No Debug Info. Base Address: $6A6C0000. Process Project1.exe (4280)
Module Load: SHELL32.dll. No Debug Info. Base Address: $74F40000. Process Project1.exe (4280)
Module Load: SHLWAPI.dll. No Debug Info. Base Address: $75CC0000. Process Project1.exe (4280)
Module Load: WSOCK32.dll. No Debug Info. Base Address: $70150000. Process Project1.exe (4280)
Module Load: WS2_32.dll. No Debug Info. Base Address: $75DD0000. Process Project1.exe (4280)
Module Load: NSI.dll. No Debug Info. Base Address: $75E10000. Process Project1.exe (4280)
Module Load: OLEACC.dll. No Debug Info. Base Address: $73290000. Process Project1.exe (4280)
Module Load: vcl190.bpl. No Debug Info. Base Address: $50430000. Process Project1.exe (4280)
Module Load: COMCTL32.dll. No Debug Info. Base Address: $6F980000. Process Project1.exe (4280)
Module Load: COMDLG32.dll. No Debug Info. Base Address: $76340000. Process Project1.exe (4280)
Module Load: WINSPOOL.DRV. No Debug Info. Base Address: $732D0000. Process Project1.exe (4280)
Module Load: oledlg.dll. No Debug Info. Base Address: $74830000. Process Project1.exe (4280)
Module Load: Intraweb_140_190.bpl. No Debug Info. Base Address: $006A0000. Process Project1.exe (4280)
Module Load: inet190.bpl. No Debug Info. Base Address: $50D20000. Process Project1.exe (4280)
Module Load: vclimg190.bpl. No Debug Info. Base Address: $00230000. Process Project1.exe (4280)
Module Load: WINMM.dll. No Debug Info. Base Address: $730C0000. Process Project1.exe (4280)
Module Load: dbrtl190.bpl. No Debug Info. Base Address: $50A60000. Process Project1.exe (4280)
Module Load: borlndmm.dll. No Debug Info. Base Address: $50030000. Process Project1.exe (4280)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
27.04.2015, 15:45
Это не лог компиляции, проект компилируется и запускается. Это лог выполнения. Надо было сразу говорить, что программа вылетает в рантайме.
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
27.04.2015, 15:48  [ТС]
Прошу прощения, программирую не так давно и всех нюансов пока не знаю.Но решение этой проблемы не нашел(
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
28.04.2015, 18:25  [ТС]
Видимо никто не знает. Это забавно)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
28.04.2015, 18:29
Чего тут забавного? Для того, чтобы проверить, локализовать проблему, и дать стОящий ответ, нужен полный проект, все библиотеки и твоя аппаратура. А просто так что-то писать - кому оно надо?
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
28.04.2015, 23:21
Цитата Сообщение от evgenshevchen Посмотреть сообщение
Мне нужно сделать так чтобы по нажатию кнопки в одном модуле вызывалась функция из другого модуля.
Ты такой секретный )
Проблема в чём? Какая ошибка в итоге?
Цитата Сообщение от evgenshevchen Посмотреть сообщение
Уже и это сделано, я прежде все таки почитал форумы. Неделю с этой гадостью борюсь.
Покажи, как сделано? В секцию public сунул?
Прибор не читается или функция не видится?

Добавлено через 9 минут
Цитата Сообщение от evgenshevchen Посмотреть сообщение
Process Start: G:\akron\lazer\.\Win32\Debug\Project1.ex e
Что-то меня эта точка смущает
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
29.04.2015, 01:12  [ТС]
Цитата Сообщение от +1 Посмотреть сообщение
Проблема в чём? Какая ошибка в итоге?
ошибку никакую не выдает. просто не запускается прога и все.
У меня АЦП 14-140 фирмы L-card. К ней есть готовая консольная прога для считывания с нее. Мне нужно чтобы это считывание начиналось по нажатию кнопки

Цитата Сообщение от +1 Посмотреть сообщение
Покажи, как сделано? В секцию public сунул?
Прибор не читается или функция не видится?
Вот хидер
C++
1
2
3
4
5
6
7
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
void main(void);
//---------------------------------------------------------------------------
#endif
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
29.04.2015, 01:18
Цитата Сообщение от evgenshevchen Посмотреть сообщение
#ifndef Unit2H #define Unit2H
Почему Unit2H ?
А не Unit1H
Что за main?
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
29.04.2015, 01:20  [ТС]
Это я тупанул...Не от туда скопировал. Там тоже самое только Unit1H
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
29.04.2015, 01:34
Цитата Сообщение от +1 Посмотреть сообщение
Что-то меня эта точка смущает
А перенести проект в нормальную папку?
0
0 / 0 / 0
Регистрация: 27.04.2015
Сообщений: 38
29.04.2015, 01:42  [ТС]
этой папки вовсе и нет, там путь ...lazer\win32\debug\project1 это 100%
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.04.2015, 01:42
Помогаю со студенческими работами здесь

Unit1 и Unit2
Здраствуйте,столкнулся с следующей проблемой. В юните2 сделал описание некоторых процедур и хочу их использовать в первом юните.Тоесть ...

Вызов Unit1 из Unit2 и наоборот
День добрый! В программе имеется unit1 и unit2. Unit2 возникает при нажатии на кнопку из unit1. А при нажатии на кнопку в unit2 должен...

Применение кода из Unit1 в Unit2
Здравствуйте. Как можно применить один код в нескольких Unit-ах ссылаясь на Unit1. В Unit1, Unit2, Unit3 .... много формул и из-за этого...

Как перенести код Unit1 в Unit2?
Здравствуйте господа профессионалы! Написал на Builder 6 программу для общения чрез COM порт. Все работает. Теперь, чтобы навести...

Вызов процедуры в Unit1 из Unit2 c параметрами
Всем добрый день! Уже умаялся, просмотрел многие сообщение, все мучаются, а толкового примера так и не нашел. В Unit1 есть много...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru