Avatar billede obscure_dk Nybegynder
19. april 2003 - 22:13 Der er 1 kommentar og
1 løsning

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
Avatar billede tam Nybegynder
21. april 2003 - 17:09 #1
Mit svar er delvis RTFM, start evt. her: http://www.codeproject.com/com/comintro.asp

STDMETHODIMP CMyXClass::GetAObject(CMyAClass** out_objResult)

Du kan ikke returnere en *CMyAClass (dette er en C++ klasse og ikke et COM Interface), du kan returnere en *IMyAClass (hvis alså at CMyAClass er implementationen af et COM interface).
Denne kan du ikke create med new, du skal bruge createinstance i stedet...

Men men, dettte er faktisk et meget store emne, så jeg vil foreslå at du læser lidt om det, og hvis du derefter har problemer, kan du jo spørge igen...
Avatar billede obscure_dk Nybegynder
22. april 2003 - 12:50 #2
Ok, jeg takker for svaret.
Stadigt ville jeg ønske at der var nogen der havde et kørende eksempel som jeg kunne lege med (misforstå mig ikke, jeg vil gerne forstå det bagvedliggende, men jeg har en meget tight deadline :-( ).
Jeg har læst artikelen, men blev desværre ikke meget klogere :-(
Jeg skal prøve at finde nogle mere konkrete spørgsmål...

/Thomas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester