Jag har gjort en ActiveX-kontroll i VB som är uppe i version 2.0 nu. Den förra fungerade (1.0) i C++ också men den här verkar inte göra det. Tror att problemet ligger i att jag använder en IPictureDisp som det heter i VB. Se http://www.webforum.nu/showthread.php?s=&postid=655916#post655916 och neråt för mer information. Någon som har en lösning?
ActiveX-kontroll
4 svar · 268 visningar · startad av Nexus86
Nu är jag ingen COM-expert, men när jag testar att skapa en "tom" VB-kontroll med den här koden:
Property Get MyIcon() As IPictureDisp
Set MyIcon = Nothing
End Property
Property Let MyIcon(iPd As IPictureDisp)
End Property
Så är det iaf inga problem att dra in den i MFC, som snyggt och prydligt wrappar IPictureDisp i en CPicture (som ärver av COleDispatchDriver). Så kanske ligger ditt problem i själva koden, kanske ligger det nånannanstans ..
Men då kan du väl inte sätta MyIcon till något heller? När man har en property som ett objekt (vilket IPictureDisp nu är) ska man inte använda Property Let utan Property Set och så ska man ha ByVal framför iPd (om det nu behövs?).
Jo, det har du ju helt rätt i, slarvigt av mig. När jag använder Property Set så kraschar det inte däremot så är Property Set inte synligt i interfacet i MFC, vilket kan förklara kraschen eftersom du har kod där, vilket jag inte har när jag testat.
Om jag däremot skriver så här:
Public Sub SetMyIcon(ByRef iPd As IPictureDisp)
End Sub
så blir SetMyIcon synlig i Interfacet i MFC. Du kunde alltså använda funktioner istället för properties, fast då försvinner ju lite av finessen i VB-studion. Men jag kan för lite om sånt här, finns säkert nån lätt lösning ..? (Kan, om inte annat, kolla på det när du släpper sourcen.)
Eftersom att det är du och att du hjälper mig kan jag ju skicka sourcen till dig så kan du kolla och se själv. Du får alltså en liten pre-view. :)
/r Lägger upp på internet och PM:ar dig adressen.