|
1
30th May 10:00
External User
|
activeX client to access LUA script of FEMM (use of .tlb)
Hi
I want to use an activeX that have 2 functions (to sendl a lua string to a
process)
I want to send the content of the Memo strings as a BSTR
I find the prototype of the function announced in the software FEMM documentation (the thing that runs the activeX server...)?
BSTR call2femm(BSTR luacmd);
The funcition does not appear directly in the automatic generated code.
I looked deeper in it (the automatic generated code of BCB from "femm.tlb"), I
found a class that has this function.
OK, my exemple bellow compiles well, but on Run, it throws an _ASSERT IsBound error... in
UTILCLS.H - COM/ActiveX Utility Classes file
Any ideas ???
Do I have to do some initialisations before calling the functions ???
here is my new version of code :
file://--------------------------------------------------------------------------
-
void __fastcall TForm1::SBSendLuaClick(TObject *Sender)
{
WideString ans, sent;
AnsiString SS;
IActiveFEMMDisp * femm=new IActiveFEMMDisp();
sent="showconsole()";
ans=femm->call2femm( sent);
/*
for (int i=0; i<MemoIn->Lines->Count; i++)
{
SS=MemoIn->Lines->Strings[i];
sent=WideString(SS).Detach();
ans=femm->call2femm( sent);
SS=AnsiString(ans);
MemoIn->Lines->Add( SS);
}
*/
}
here is its automatic generated file Femm_TLB.H
:
/ ************************************************** **********************
//
// AVERTISSEMENT
// -------
// Les types déclarés dans ce fichier ont été générés à partir de données
lues
// depuis la bibliothèque de types. Si cette dernière (via une autre
bibliothèque de types
// s'y référant) est explicitement ou indirectement ré-importée, ou la
commande "Rafraîchir"
// de l'éditeur de bibliothèque de types est activée lors de la modification
de la bibliothèque
// de types, le contenu de ce fichier sera régénéré et toutes les
modifications
// manuellement apportées seront perdues.
// ************************************************** **********************
//
// C++ TLBWRTR : $Revision: 1.151.1.0.1.27 $
// Fichier généré le 21/10/2004 11:11:23 depuis la bibliothèque de types
ci-dessous.
// ************************************************** **********************
//
// Bibl. types : C:\Program Files\femm40\bin\femm.tlb (1)
// LIBID: {04EF434A-1A91-495A-85AA-C625602B4AF4}
// LCID: 0
// Fichier d'aide :
// Chaîne d'aide :
// DepndLst:
// (1) v2.0 stdole, (C:\WINNT\system32\stdole2.tlb)
// ************************************************** **********************
//
#ifndef Femm_TLBH
#define Femm_TLBH
#pragma option push -b -w-inl
#include <utilcls.h>
#if !defined(__UTILCLS_H_VERSION) || (__UTILCLS_H_VERSION < 0x0600)
//
// Le code généré par l'utilitaire TLIBIMP ou la fonction d'importation de
bibliothèque de types
// ou d'ActiveX de C++Builder repose sur des versions spécifiques
// du fichier en-tête UTILCLS.H situé dans le répertoire INCLUDE\VCL. Si une
// version antérieure du fichier est détectée, vous devrez appliquer une
mise à jour ou un correctif.
//
#error "Ce fichier requiert une version plus récente du fichier en-tête
UTILCLS.H" \
"Vous devez appliquer une mise à jour/correctif à votre copie de
C++Builder"
#endif
#include <olectl.h>
#include <ocidl.h>
#if defined(USING_ATLVCL) || defined(USING_ATL)
#if !defined(__TLB_NO_EVENT_WRAPPERS)
#include <atl/atlmod.h>
#endif
#endif
// ************************************************** *******************//
// Référence Forward à certains types VCL (pour éviter d'inclure STDVCL.HPP)
// ************************************************** *******************//
namespace Stdvcl {class IStrings; class IStringsDisp;}
using namespace Stdvcl;
typedef TComInterface<IStrings> IStringsPtr;
typedef TComInterface<IStringsDisp> IStringsDispPtr;
namespace Femm_tlb
{
// ************************************************** *******************//
// Chaîne d'aide :
// Version : 1.0
// ************************************************** *******************//
// ************************************************** *******************//
// GUIDS déclarés dans la bibliothèque de types. Préfixes utilisés :
// Bibliothèques de types : LIBID_xxxx
// CoClasses : CLSID_xxxx
// DISPInterfaces : DIID_xxxx
// Non-DISP interfaces : IID_xxxx
// ************************************************** *******************//
extern "C" const __declspec(selectany) GUID LIBID_Femm = {0x04EF434A,
0x1A91, 0x495A,{ 0x85, 0xAA, 0xC6,0x25, 0x60, 0x2B,0x4A, 0xF4} };
extern "C" const __declspec(selectany) GUID DIID_IActiveFEMM = {0xE08185B4,
0xFEDF, 0x4B1B,{ 0xA8, 0x8D, 0xD4,0x0C, 0x97, 0x62,0x50, 0x60} };
extern "C" const __declspec(selectany) GUID CLSID_ActiveFEMM = {0x0A35D5BD,
0xDCA9, 0x4C39,{ 0x95, 0x12, 0x1D,0x89, 0xA1, 0xA3,0x70, 0x47} };
// ************************************************** *******************//
// Déclaration Forward des types définis dans la bibliothèque de types
// ************************************************** *******************//
interface DECLSPEC_UUID("{E08185B4-FEDF-4B1B-A88D-D40C97625060}")
IActiveFEMM;
typedef TComInterface<IActiveFEMM, &DIID_IActiveFEMM> IActiveFEMMPtr;
// ************************************************** *******************//
// Déclaration des CoClasses définies dans la bibliothèque de types
// (REMARQUE : On affecte chaque CoClasse à son Interface par défaut)
//
// Les macros LIBID_OF_ affectent un LIBID_OF_CoClassName au GUID de
// cette Bibliothèque de types. Cela simplifie la mise à jour des macros
lorsque le nom
// de CoClasse change.
// ************************************************** *******************//
typedef IActiveFEMM ActiveFEMM;
typedef IActiveFEMMPtr ActiveFEMMPtr;
#define LIBID_OF_ActiveFEMM (&LIBID_Femm)
// ************************************************** *******************//
// Interface : IActiveFEMM
// Indicateurs : (4096) Dispatchable
// GUID : {E08185B4-FEDF-4B1B-A88D-D40C97625060}
// ************************************************** *******************//
interface IActiveFEMM : public TDispWrapper<IDispatch>
{
BSTR __fastcall call2femm(BSTR luacmd)
{
_TDispID _dispid(/* call2femm */ DISPID(1));
TAutoArgs<1> _args;
_args[1] = luacmd /*[VT_BSTR:0]*/;
OleFunction(_dispid, _args);
return _args.GetRetVariant();
}
BSTR __fastcall mlab2femm(BSTR luacmd)
{
_TDispID _dispid(/* mlab2femm */ DISPID(2));
TAutoArgs<1> _args;
_args[1] = luacmd /*[VT_BSTR:0]*/;
OleFunction(_dispid, _args);
return _args.GetRetVariant();
}
};
#if !defined(__TLB_NO_INTERFACE_WRAPPERS)
// ************************************************** *******************//
// DispIntf : IActiveFEMM
// Flags : (4096) Dispatchable
// GUID : {E08185B4-FEDF-4B1B-A88D-D40C97625060}
// ************************************************** *******************//
template<class T>
class IActiveFEMMDispT : public TAutoDriver<IActiveFEMM>
{
public:
IActiveFEMMDispT(){}
IActiveFEMMDispT(IActiveFEMM *pintf)
{
TAutoDriver<IActiveFEMM>::Bind(pintf, false);
}
IActiveFEMMDispT(IActiveFEMMPtr pintf)
{
TAutoDriver<IActiveFEMM>::Bind(pintf, true);
}
IActiveFEMMDispT& operator=(IActiveFEMM *pintf)
{
TAutoDriver<IActiveFEMM>::Bind(pintf, false);
return *this;
}
IActiveFEMMDispT& operator=(IActiveFEMMPtr pintf)
{
TAutoDriver<IActiveFEMM>::Bind(pintf, true);
return *this;
}
HRESULT BindDefault()
{
return OLECHECK(Bind(CLSID_ActiveFEMM));
}
HRESULT BindRunning()
{
return BindToActive(CLSID_ActiveFEMM);
}
BSTR __fastcall call2femm(BSTR luacmd);
BSTR __fastcall mlab2femm(BSTR luacmd);
};
typedef IActiveFEMMDispT<IActiveFEMM> IActiveFEMMDisp;
// ************************************************** *******************//
// DispIntf : IActiveFEMM
// Flags : (4096) Dispatchable
// GUID : {E08185B4-FEDF-4B1B-A88D-D40C97625060}
// ************************************************** *******************//
template <class T> BSTR __fastcall
IActiveFEMMDispT<T>::call2femm(BSTR luacmd)
{
_TDispID _dispid(*this, OLETEXT("call2femm"), DISPID(1));
TAutoArgs<1> _args;
_args[1] = luacmd /*[VT_BSTR:0]*/;
OleFunction(_dispid, _args);
return _args.GetRetVariant();
}
template <class T> BSTR __fastcall
IActiveFEMMDispT<T>::mlab2femm(BSTR luacmd)
{
_TDispID _dispid(*this, OLETEXT("mlab2femm"), DISPID(2));
TAutoArgs<1> _args;
_args[1] = luacmd /*[VT_BSTR:0]*/;
OleFunction(_dispid, _args);
return _args.GetRetVariant();
}
// ************************************************** *******************//
// Les typedefs suivants exposent les classes (CoCoClassName) qui
// fournissent les méthodes statiques Create() et CreateRemote(LPWSTR
machineName)
// pour créer une instance d'objet exposé. Ces fonctions peuvent
// être utilisées par les clients désirant automatiser les CoClasses
exposées
// par cette bibliothèque de types.
// ************************************************** *******************//
#endif // __TLB_NO_INTERFACE_WRAPPERS
}; // namespace Femm_tlb
#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace Femm_tlb;
#endif
#pragma option pop
#endif // Femm_TLBH
|