Bruge VB6 COM objekter i VC++.NET (og omvendt)
Jeg har udviklet et system som basalt set består af 3 COM (ActiveX DLL) komponenter som er skrevet i Visual Basic 6.Jeg ønsker nu at bevæge mig væk fra VB og vil starte med at udvikle en komponent som skal erstatte visse funktioner i den ene komponent (lad os kalde de "gamle" for A, B og C og den nye for X (som med tiden skal erstatte B)).
Komponenten X skal udvikles i Visual C++.NET og skal understøtte følgende.
1) jeg skal kunne oprette instanser af en klasse i A fra X (via COM).
2) jeg skal kunne oprette instanser af en klasse i X fra C (via COM).
3) jeg skal kunne kalde X fra C, hvorefter X returnerer et objekt fra A (via COM)
4) jeg skal kunne tilgå en database (helst via ADO eller MFC).
Jeg har prøvet mange ting (synes jeg selv :-), her er et af mine forsøg:
a) New Project -> "MFC DLL" (Additional features: Automation)
b) Add Class -> "MFC class from typelib" (selecting A.MyAClass for instance)
c) Add Class -> "ATL Simple Object" (Bliver spurgt om jeg vil tilføje ATL support, vælger "Ja") Navngiver "MyXClass", Threading model: "Apartment", Interface: "Dual", Aggregation: "Yes"
d) Vælger "IMyClass" i Class View, Add Method "GetAObject"
Jeg vil gerne have GetAObject() til at returnere en instans af A.MyAClass men jeg kan ikke regne ud hvordan :-(
Et forsøg:
STDMETHODIMP CMyXClass::GetAObject(CMyAClass** out_objResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyACLass *objResult;
objResult = new CMyACLass();
out_objResult = *objResult;
return S_OK;
}
Men jeg får denne fejl når IDL filen skal kompileres:
error MIDL2025 : syntax error : expecting a type specification near "MyAClass"
Jeg har også prøvet med IUnknown** istedet for CMyAClass** men jeg kan ikke regne ud hvad jeg skal skrive i funktionen for at instantiere MyAClass, og returnere det.
Håber nogen kan hjælpe!
(Og please, hvis svaret er RTFM - vil et link være meget værdsat, jeg har godt nok trævlet mange sider dokumentation igennem efterhånden :-)
Med venlig hilsen
Thomas Jensen