Использование OLE

 

Проблема:написал на Delphi DLL в которой должен создаваться экземляр ADODB.connection-

DLL нормально загружается, но ADODB не создается,код:

uses
SysUtils,
Classes,
COMObj,
ADODB_TLB;

{$R *.res}

var
Cnn :Connection15;

function CreateConnection :longint; stdcall;
begin
try
Cnn:=CoConnection.Create;
Result:=1;
except
Result:=0;
end;
end;

.................................................

exports

CreateConnection


begin

end.


код эксперта:


#include <WinUser32.mqh>
#import "ADOLib.dll"
int CreateConnection();


int init()
{

int create_cnn=CreateConnection();
Alert ("Сработала ф-ия init() при запуске ",create_cnn); // Сообщение

return(0);
}


переменная create_cnn равна 0, то есть создания экземпляра ADODB.Connection не происходит.

Не понимаю почему. :(

 

я пробовал на с++ такое

так после всех рекомендаций и не заработало

на дельфях наступил на теже грабли (падение терминала при попытке создания ADO)

в обоих случаях использовал DataModule

....

попробовать написать простенький  exe в тех же дельфях с использованием данной dll и посмотреть что вернеться в качестве результата

 
olyakish >>:

я пробовал на с++ такое

так после всех рекомендаций и не заработало

а чем закончилась история??? неужели не получилось?

вот ссылка, где я выложил длл с исходником для работы метатрейдера с БД (интербэйс), написано на делфи, но понять можно

'Вопрос про выгрузку в другие БД'

 
blend >>:

а чем закончилась история??? неужели не получилось?

вот ссылка, где я выложил длл с исходником для работы метатрейдера с БД (интербэйс), написано на делфи, но понять можно

'Вопрос про выгрузку в другие БД'

Нет тогда так и не заработало

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "MT4_SQL_TICK_ONE2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

#pragma argsused
using namespace std;
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
        break;
}
  return TRUE;
}

TDataModule2 *DataModule2;
//---------------------------------------------------------------------------
__fastcall TDataModule2::TDataModule2(TComponent* Owner)
        : TDataModule(Owner)
{
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
int __stdcall SQLConnect(char *Login, char *Pass)
        {
                  DataModule2 = new TDataModule2(NULL);
                  DataModule2->ADOConnection1->Open(Login,Pass);
                  if (DataModule2->ADOConnection1->Connected)
                        {return 0;}
                  else
                        {return -1;}

        }

вот так не получилось

терминал все равно падает ... 

 

Всем заинтересованным сообщаю, что буквально через минуту после

создания темы, удалось пробороть проблему создания ADODB.Connection, все просто:

uses
SysUtils,
Classes,
ActiveX,
ADODB_TLB;

{$R *.res}

var
Cnn :Connection15;

function CreateConnection :longint; stdcall;
begin
try

CoIntialize(nil); //<------------------------------ !!!!!

Cnn:=CoConnection.Create;
Result:=1;
except
Result:=0;
end;
end;

.................................................

exports

CreateConnection


begin

end.



конечно, при выгрузке библиотеки в коде необходимо указать CoUninitialize;