Прошу указать ошибку(и) в проекте Borland c++ Builder 6.0 (dll) - страница 2

 
olyakish >>:

при вызове даже SQLClose терминал падает по крешу (функция вызывается без параметров)

Склепай функцию, которая окрывает, записывавет данные в сервер и закрывает соединение. и убери DataModule

lis >>:

Можешь так попробовать, или возьми для своих ADOConnection1, ADOStoredProc1, DataModule2 выдели память, память не выделена под объекты вот и креш.

Он дело говорит. Подумай о времени жизни твоих классов. ПО идее SQLExecProc и должен вылетать, ибо все объекты будут не проиниализированы


Кстати, ты пробовал вызывать dll из своей программы?

 
GarF1eld >>:
А чему в данном случае равен Application? NULL?

Нет не NULL. Вроде бы хендл того кто вызывает эту dll.

Сам компилер хочет чтобы так объекты инициализировались.

 
blend >>:

А хде создается датамодуль??? я вижу только обращение к нему

//---------------------------------------------------------------------------

#ifndef MT4_SQL_TICK_ONE2H
#define MT4_SQL_TICK_ONE2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport)int __stdcall SQLConnect(char *Login, char *Pass);
extern "C" __declspec(dllexport) int __stdcall SQLClose();
extern "C" __declspec(dllexport) int __stdcall SQLExecProc(char *Symbol, int DateTime , float Bid);
class TDataModule2 : public TDataModule
{
__published: // IDE-managed Components
        TADOConnection *ADOConnection1;
        TADOStoredProc *ADOStoredProc1;
private: // User declarations
public:// User declarations
        __fastcall TDataModule2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TDataModule2 *DataModule2;
//---------------------------------------------------------------------------
#endif
 
olyakish >>:

шутите?) здесь создается класс и указатель, объект DataModule2 надо создать принудительно в теле программы через new, объекты на DataModule2  создадутся автаматически из *.dfm, так что проблема у вас только в том что DataModule2 пустая или неизвестно на что указывает

 
blend >>:

шутите?) здесь создается класс и указатель, объект DataModule2 надо создать принудительно в теле программы через new, объекты на DataModule2  создадутся автаматически из *.dfm, так что проблема у вас только в том что DataModule2 пустая или неизвестно на что указывает

int __stdcall SQLConnect(char *Login, char *Pass)
        {
                  DataModule2 = new TDataModule2(Application);
Так
 
olyakish >>:
Так

да, вместо Application можно поставить Null, и в других функциях проверять на инициализацию DataModule2, внутри функций ставить try except чтобы терминал не падал

Причина обращения: