Męczę się z kawałkiem kodu poniżej i nie mogę wywołać funkcji z dll-ki rejestrowalnej
w bibliotece funkcja którą chcę wywołać jest wyeksportowana w następujący sposób
[id(9), helpstring("method getFNames")] void getFNames(BSTR* fiscalNames);
funckcję wywołuję i to nie przynosi żadnego efektu, 'lista' zawsze jest pusta :(
wxVariant v = m_fisc.CallMethod("getFNames",lista);
Co dziwne jeśli zamiast nazwy "getFNames" podstawię "kukuryku" to nie mam żadnego błędu
Jak to naprawdę powinno wywoływać się z wykorzystaniem wxWidgets
Może jest jakiś prosty sposób co by biblioteki dll (com) w prosty sposób utworzyć klasę, tak jak to się robi w Delphi poprzez import biblioteki - tworzy unit.
#ifndef WRAPPERACTIVEX_H
#define WRAPPERACTIVEX_H
#include <wx/wx.h>
#include <wx/dialog.h>
#include "wx/mediactrl.h" // wxMediaBackendCommonBase
#include "wx/msw/ole/activex.h" // wxActiveXContainer
#include "wx/msw/ole/automtn.h" // wxAutomationObject
#include "wx/msw/ole/uuid.h"
const IID DIID__FDriver = {0x4DA4BA91,0xC2A7,0x4401,{0xB7,0xA3,0x0C,0x04,0xB5,0xCC,0x4E,0x5C}};
const CLSID CLSID_FDriver = {0x19010E45,0xD0C0,0x4B36,{0xAE,0x7c,0xeb,0xa7,0x02,0x8b,0x1f,0xfd}};
class WrapperActiveX
{
public:
WrapperActiveX(wxWindow *pparent) {
parent=pparent;
};
~WrapperActiveX()
{
if (pDispatch)
{
((IUnknown*)pDispatch)->Release();
CoFreeUnusedLibraries();
//CoFreeAllLibraries
wxMessageBox("Zwolnienie");
}
};
bool init()
{
//IDispatch* pDispatch=0;
pDispatch=0;
if( CoCreateInstance(CLSID_FDriver,
NULL,
CLSCTX_INPROC_SERVER,
DIID__FDriver, (void**)&pDispatch) != 0 )
return false;
//poniżej działa
// pDispatch=static_cast<IDispatch*>(m_fisc.GetDispatchPtr());
// if (m_fisc.GetInstance("Excel.Application"))
// {
// m_fisc.PutProperty("ActiveCell.Font.Bold", true);
// wxMessageBox("Excel");
// };
return true;
};
wxString ListFDriver()
{
unsigned char *lista=0;
wxVariant v = m_fisc.CallMethod("getFNames",lista);
if (lista)
{
wxMessageBox(wxString::Format("załadowano %s",lista));
delete [] lista;
};
return "";
};
//Uuid uuid_fisc;
//wxActiveXContainer* m_pAX;
wxAutomationObject m_fisc;
wxWindow *parent;
IDispatch* pDispatch;
};
#endif // WRAPPERACTIVEX_H