CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Subiekt GT Sfera
Strona 1 z 1

Subiekt GT Sfera

Nowy postNapisane: środa, 18 kwietnia 2018, 09:44
przez Mironas
Czy ktoś wie, jak podłączyć się z B++Builder-a do Subiekta GT za pomocą modułu SFERA ?
W helpie są tylko przykłady dla Visual Basic z poziomu aplikacji MS Office. Pewnie były by pomocne, ale nie wiem co trzeba podłączyć. Jakieś kontrolki ActiveX, biblioteki, pliki nagłówkowe???

Re: Subiekt GT Sfera

Nowy postNapisane: środa, 18 kwietnia 2018, 11:06
przez polymorphism
Z tego, co piszą na stronie, do komunikacji wykorzystywane jest OLE Automation. Być może jest w VCL-u jakaś klasa do obsługi ów mechanizmu, wtedy wystarczy mieć opis wszystkich klas udostępnionych przez developera Subiekta GT.


Możesz być hardcorem i rzeźbić w czystym COM używając interfejsu IDispatch i typu VARIANT.

Re: Subiekt GT Sfera

Nowy postNapisane: środa, 18 kwietnia 2018, 15:51
przez lukagrom
Można spróbować wykorzystać metody Variant::CreateObject, lub Varian::GetActiveObject w celu sprawdzenia, czy w ogóle Subiekt jest "widoczny" dla C++ Buildera (zakładając wykorzystywany OLE Aut.)
Całoś wykorzystuje bibliotekę -
Kod: Zaznacz cały
#include <ComObj.hpp>

Przykładowe szukanie Subiekta:

KOD cpp:     UKRYJ  
Variant testSubiekt;
testSubiekt=NULL;
 try
 {
 try
 {
  Variant testSubiekt=Variant::CreateObject("SubiektGT.Application"); //Tutaj dla CreateObject musisz sie wywiedziec jak Subiekt jest definiowany nazwa w OLE.  
  testSubiekt.OlePropertySet("Vsible",true);
  testSubiekt.OlePropertyGet("Workbooks").OleProcedure("Add");
 }
 catch(EOleSysError *info_bledu)
 {
  Label1->Caption="Nie mozna polaczyc sie z Subiektem : "+info_bledu->Message;
 }
 catch(...)
 {
  Label1->Caption="Blad niezdefiniowany";
 }
 }
 __finally
 {
  testSubiekt=Unassigned;
 }
}

 

Re: Subiekt GT Sfera

Nowy postNapisane: środa, 2 maja 2018, 09:51
przez Mironas
Dziękuję za odpowiedzi.

Dla potomnych i zainteresowanych - krótka instrukcja dla C++Buildera.
Przygotowanie aplikacji:
KOD cpp:     UKRYJ  
// Pliki nagłówkowe
#include <ComObj.hpp>
#include <InsERT_TLB.h>

// Własne definicje
#define InsERT Insert_tlb

// Typy wyliczeniowe
enum {VBFalse=0, VBTrue=-1};          // Wartości dla typu VARIANT_BOOL

// Dodać do projektu
C:\Users\xxxxxxx\Documents\RAD Studio\8.0\Imports\InsERT_TLB.cpp
 


Otwarcie Subiekta:
KOD cpp:     UKRYJ  
  // Obiekt 'GT'
  InsERT::GTPtr oGT = CreateOleObject("InsERT.GT");

  // Obiekt 'Dodatki'
  //InsERT::DodatkiPtr oDodatki = CreateOleObject("InsERT.Dodatki");

  // Parametry połączenia
  oGT->Autentykacja     = AutentykacjaEnum::gtaAutentykacjaMieszana;
  oGT->Produkt          = ProduktEnum::gtaProduktSubiekt;
  oGT->Serwer           = L"KOMPUTER\\SQLEXPRESS";
  oGT->Uzytkownik       = L"sa";
  oGT->UzytkownikHaslo  = L"************";
  //oGT->UzytkownikHaslo  = oDodatki->Szyfruj(L"************");    // Alternatywnie
  oGT->Baza             = L"Podmiot01";
  oGT->Operator         = L"Szef";
  oGT->OperatorHaslo    = L"";
  //oGT->OperatorHaslo    = oDodatki->Szyfruj(L"");       // Alternatywnie

  InsERT::SubiektPtr oSubiekt = oGT->Uruchom(UruchomDopasujEnum::gtaUruchomDopasuj, UruchomEnum::gtaUruchom);
  oSubiekt->Okno->Widoczne = VBTrue;      // VARIANT_BOOL:
 


Oczywiście można bez definiowania
#define InsERT Insert_tlb
i w kodzie używać np Insert_tlb::GTPtr ale tak mniej czytelnie (moim zdaniem) i niezgodne z przykładami w dokumentacji.