AutomaticComponentToolkit icon indicating copy to clipboard operation
AutomaticComponentToolkit copied to clipboard

[C++] Interfacewrapper.cpp compilation failure (string cache)

Open fsahmad opened this issue 4 years ago • 0 comments

Given a function with a class / optionalclass argument, the generated code ends up looking something like this:

interfacewrapper.cpp

std::string sName("");
IBase* pBaseThisResult(nullptr);
IFoo* pIFoo = dynamic_cast<IFoo*>(pIBaseClass);
if (!pIFoo)
	throw EMyComponentInterfaceException(MYCOMPONENT_ERROR_INVALIDCAST);
bool isCacheCall = (pNameBuffer == nullptr);
if (isCacheCall) {
	pBaseThisResult = pIFoo->GetProperties(sName, *pBar);
	pIFoo->_setCache (new ParameterCache_3<std::string, MyComponent_uint8, CMyComponentFoo *> (sName, *pBar, pBaseThisResult));
}
else {
	auto cache = dynamic_cast<ParameterCache_3<std::string, MyComponent_uint8, CMyComponentFoo *>*> (pIFoo->_getCache ());
	if (cache == nullptr)
		throw EMyComponentInterfaceException(MYCOMPONENT_ERROR_INVALIDCAST);
	cache->retrieveData (sName, *pBar, pBaseThisResult);
	pIFoo->_setCache (nullptr);
}

Since CMyComponentFoo is a binding class, this won't compile. Also, the pointer pBaseThisResult is actually of type IBase *.

I've hacked a fix to get it to work by generating IBase * instead, but as I don't know how this parameter caching is supposed to work I can't say if it's the right way to fix it.

fsahmad avatar Jan 29 '21 09:01 fsahmad