Hallo,
ich habe eine Methode für einen DCOM-Server erstellt:
<PRE>
STDMETHODIMP TRemasterServerImpl::StoreView(long lRemaster, long lPos,
long lItem, long lMeasurement, long* plWidth, long* plHeight,
BSTR* pstrArticle, long* plJob, long* plOpt, long* plDoppelOpt,
long* plLockId, long* plReservation, DATE* pLastModTime, long* plError)
try
{
m_DataModule->ADOQuery1->Close();
m_DataModule->ADOQuery1->SQL->Clear();
m_DataModule->ADOQuery1->SQL->Add("SELECT * FROM ReMaDaten WHERE
Remaster=:Remaster");
m_DataModule->ADOQuery1->SQL->Add("AND Pos=:Pos AND Item=:Item");
m_DataModule->ADOQuery1->SQL->Add("AND Measurement=:Measurement");
m_DataModule->ADOQuery1->Parameters->ParamByName("Remaster")->Value =
strRemaster;
m_DataModule->ADOQuery1->Parameters->ParamByName("Pos")->Value =
strPos;
m_DataModule->ADOQuery1->Parameters->ParamByName("Item")-Value =
strItem;
m_DataModule->ADOQuery1->Parameters->ParamByName("Measurement")->Value
= strMeasurement;
m_DataModule->ADOQuery1->Prepared;
m_DataModule->ADOQuery1->Open();
m_DataModule->ADOQuery1->Active = true;
*plWidth = m_DataModule->ADOQuery1->Fields->Fields[4]->Value;
*plHeight = m_DataModule->ADOQuery1->Fields->Fields[5]->Value;
*pstrArticle = m_DataModule->ADOQuery1->Fields->Fields[7]->Value;
*plReservation = m_DataModule->ADOQuery1->Fields->Fields[12]->Value;
*pLastModTime = m_DataModule->ADOQuery1->Fields->Fields[13]->Value;
*plError = 0;
hr = S_OK;
}
catch (...)
{
hr = E_FAIL;
}
return hr;
}
</PRE>
Diese Methode wird beim Client folgendermassen aufgerufen:
<PRE>
{
IRemasterServerDisp RemasterServer;
long Remaster = 0;
long Pos = 0;
long Item = 0;
long Measurement = 0;
long *lWidth;
long *lHeight;
long *lJob;
long *lOpt;
long *lDoppelOpt;
long *lLockId;
long *lReservation;
long *lError;
wchar_t **Article;
double *LastModTime;
AnsiString strWidth;
AnsiString strHeight;
AnsiString strArticel;
AnsiString strJob;
AnsiString strOpt;
AnsiString strDoppelOpt;
AnsiString strrLockId;
AnsiString strReservation;
AnsiString strLastModTime;
__try
{
if (!DCOMConnection1->Connected)
DCOMConnection1->Connected = true;
RemasterServer.Bind(DCOMConnection1->GetServer());
RemasterServer->StoreView(Remaster, Pos, Item, Measurement, lWidth,
lHeight, Article, lJob, lOpt, lDoppelOpt, lLockId,
lReservation, LastModTime, lError);
strWidth = (*lWidth);
Edit1->Text = strWidth;
}
__finally
{
if (RemasterServer.IsBound())
RemasterServer.Unbind();
}
</PRE>
Mein Problem ist, das die Methode beim DCOM Server überhaupt nicht aufgerufen wird. Habe ich etwas falsch gemacht?
Jörg
ich habe eine Methode für einen DCOM-Server erstellt:
<PRE>
STDMETHODIMP TRemasterServerImpl::StoreView(long lRemaster, long lPos,
long lItem, long lMeasurement, long* plWidth, long* plHeight,
BSTR* pstrArticle, long* plJob, long* plOpt, long* plDoppelOpt,
long* plLockId, long* plReservation, DATE* pLastModTime, long* plError)
try
{
m_DataModule->ADOQuery1->Close();
m_DataModule->ADOQuery1->SQL->Clear();
m_DataModule->ADOQuery1->SQL->Add("SELECT * FROM ReMaDaten WHERE
Remaster=:Remaster");
m_DataModule->ADOQuery1->SQL->Add("AND Pos=:Pos AND Item=:Item");
m_DataModule->ADOQuery1->SQL->Add("AND Measurement=:Measurement");
m_DataModule->ADOQuery1->Parameters->ParamByName("Remaster")->Value =
strRemaster;
m_DataModule->ADOQuery1->Parameters->ParamByName("Pos")->Value =
strPos;
m_DataModule->ADOQuery1->Parameters->ParamByName("Item")-Value =
strItem;
m_DataModule->ADOQuery1->Parameters->ParamByName("Measurement")->Value
= strMeasurement;
m_DataModule->ADOQuery1->Prepared;
m_DataModule->ADOQuery1->Open();
m_DataModule->ADOQuery1->Active = true;
*plWidth = m_DataModule->ADOQuery1->Fields->Fields[4]->Value;
*plHeight = m_DataModule->ADOQuery1->Fields->Fields[5]->Value;
*pstrArticle = m_DataModule->ADOQuery1->Fields->Fields[7]->Value;
*plReservation = m_DataModule->ADOQuery1->Fields->Fields[12]->Value;
*pLastModTime = m_DataModule->ADOQuery1->Fields->Fields[13]->Value;
*plError = 0;
hr = S_OK;
}
catch (...)
{
hr = E_FAIL;
}
return hr;
}
</PRE>
Diese Methode wird beim Client folgendermassen aufgerufen:
<PRE>
{
IRemasterServerDisp RemasterServer;
long Remaster = 0;
long Pos = 0;
long Item = 0;
long Measurement = 0;
long *lWidth;
long *lHeight;
long *lJob;
long *lOpt;
long *lDoppelOpt;
long *lLockId;
long *lReservation;
long *lError;
wchar_t **Article;
double *LastModTime;
AnsiString strWidth;
AnsiString strHeight;
AnsiString strArticel;
AnsiString strJob;
AnsiString strOpt;
AnsiString strDoppelOpt;
AnsiString strrLockId;
AnsiString strReservation;
AnsiString strLastModTime;
__try
{
if (!DCOMConnection1->Connected)
DCOMConnection1->Connected = true;
RemasterServer.Bind(DCOMConnection1->GetServer());
RemasterServer->StoreView(Remaster, Pos, Item, Measurement, lWidth,
lHeight, Article, lJob, lOpt, lDoppelOpt, lLockId,
lReservation, LastModTime, lError);
strWidth = (*lWidth);
Edit1->Text = strWidth;
}
__finally
{
if (RemasterServer.IsBound())
RemasterServer.Unbind();
}
</PRE>
Mein Problem ist, das die Methode beim DCOM Server überhaupt nicht aufgerufen wird. Habe ich etwas falsch gemacht?
Jörg