CBuilder4 patch broke MIDAS

By: Kevin Scardina

Abstract: After installing the patch to CBuilder4 even the simplest MIDAS applications will not work.

Problem: When trying to set the Active property of a TClientDataSet to true in design mode the IDE reports a:

'src->QueryInterface (GetIID(), (LPVOID*)(&intf))': No such interface supported @ D:/CBUILD~1/INCLUDE/VCL/utilcls.h /2014 error message.

Workaround: This is a known bug that occurred when we released the patch to CBuilder4. The workaround to this is to edit the <SERVER> Impl.cpp file. You need to change everyplace in this file where the class tries to set an in/out parameter value with a IProviderPtr without typecasting the to a IProvider*

For example if you created a remote data module that exported a TTable called Table1 some of the server code generated would look as follows: ...

STDMETHODIMP TTestServerImpl::get_Table1(IProviderPtr* Value)

{

try

{

_di_IProvider IProv = m_DataModule->Table1->Provider;

IProv->AddRef();

*Value = IProv; //<- HERE IS ONE OF THE PROBLEMS!!!

}

catch(Exception &e)

{

return Error(e.Message.c_str(), IID_ITestServer);

}

return S_OK;

};

...

What you need to do is change the line:

*Value = IProv;

To:

*Value = (IProvider*)IProv;

If you do this anywhere in this file that a return value (this includes out parameters) is an IProviderPtr the server should work fine.


Server Response from: ETNASC02