Нельзя ли узнать что именно выдаёт компилятор!
Ну за неимением такового попробую предположить.
Да вроде отсутствует словечко одно в декларации __stdcall
А вообще лучше всего использовать специяльно предназначеный макрос STDMETHODIMP
Честно говоря сделано то всё вроде правильно!
Да к стати компилятор будет ещё ругаться на отсутствие методов IUnknown
Проблему я просто решил лишним вызовом:
virtual HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj){
return TInterfacedObject::QueryInterface(IID, (void *)Obj);
};
И на последок вот пример который перетаскивает имена файлов в editbox:
//---------------------------------------------------------------------------
HRESULT _stdcall TDropTarget::DragEnter(IDataObject * pDataObject,DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
return S_OK;
};
HRESULT _stdcall TDropTarget::DragOver(DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
return S_OK;
};
HRESULT _stdcall TDropTarget::DragLeave(void){
return S_OK;
};
HRESULT _stdcall TDropTarget::Drop(IDataObject * pDataObject,DWORD grfKeyState,POINTL pt,DWORD * pdwEffect){
STGMEDIUM Data;
FORMATETC Format={CF_HDROP,NULL,DVASPECT_CONTENT,-1,1};
HRESULT returnval=pDataObject->GetData(&Format,&Data);
if((returnval==S_OK)&&(Data.tymed==TYMED_HGLOBAL)){
UINT buffSize=DragQueryFile(Data.hGlobal,0,NULL,0);
char* Buffer=new char[buffSize+1];
DragQueryFile(Data.hGlobal,0,Buffer,buffSize+1);
Form1->FileName->Text=Buffer;
delete[] Buffer;
GlobalFree(Data.hGlobal);
};
return returnval;
};