ActiveX element aanroepen vanuit een DLL -> Access violation! Help!

Status
Niet open voor verdere reacties.

tigerstrenght

Nieuwe gebruiker
Lid geworden
10 apr 2008
Berichten
2
Hallo allemaal,

Ik ben bezig met een project waarbij ik een USB interface moet maken voor een groot en complex ASIC evaluation board.De interface vindt plaats tussen een PIC18F4550 en een Windows XP PC.

Nu heb ik een C++ applicatie ontwikkeld die gebruik maakt van een ActiveX element (HIDagent) om de USB te besturen. Hierdoor is de code die nodig is voor de USB véél minder en is de boel ook nog eens veel overzichtelijker.
Tot zover dus geen probleem, de USB interface werkt en alle functies die ik heb geschreven werken prima (SPI interface, I2C interface, PWM etc.).

Echter nu is de opdracht om het geheel te integreren in een Labview VI. Hier zal ik verder niet te diep op ingaan, want erg relevant is deze info niet. Waar het op neer komt is dat alles in een DLL geintegreerd moet worden.
Nu heb ik met Borland studio C++ 2006 een DLL gemaakt van de bestaande code. Deze DLL bevat een aantal simpele externe functies, zoals ReadSPI();
Vervolgens een test applicatie gemaakt waarin ik de DLL importeer en test. Alle functies zijn toegankelijk en de functies die géén gebruik maken van de ActiveX werken prima. :thumb:Echter alle functies die wel gebruik maken van de ActiveX geven een "Access Violation" error. :shocked:

Heeft iemand enig idee hoe ik dit het best kan oplossen? Ik ben handig in het maken van C++ code, maar van DLL's en ActiveX heb ik niet veel verstand. De ActiveX is geregistreerd in Windows en werkt vanuit zowel Labview als C++. Het zelfde geldt voor de DLL, uitgezonderd de eerder genoemde functies. De ActiveX is geintegreerd in de C++ code waarvan ik de DLL maak, hij is dus aanwezig binnen de DLL.

Wie o wie kan mij verder op weg helpen?

Bedankt alvast!
 
Het is al een tijdje geleden dat ik met activeX te maken heb gehad. Overigens begin ik er binnenkort weer aan en de eerlijkheid gebiedt mij te zeggen dat bij mijn activeX control alles prachtig werkte totdat je je vb script in debug mode draaide, dan crashte alles zo hard dat debugger en acces zonder enige error afgesloten werden.
Aangezien je borland cbuilder gebruikt is geen manier om te weten wat er in de black box van borland tov activex gebeurt, maar als je een access violation krijgt is de kans groot dat het iets te maken heeft met het interne reference counting dat je zelf moet afhandelen. Gebruik je ergens een new statement voor een object dat je in je control aanroept? Dan had je cocreateinstance aan moeten roepen misschien.....
 
Yes!! Het probleem is opgelost. De oorzaak bleek te zitten in het feit dat een control form in een DLL niet automatisch wordt aangemaakt. Aangezien de ActiveX op dit form stond werd er inderdaad geschreven naar iets wat niet bestond.

Ik heb het nu als volgt opgelost:

Code:
      CoInitialize(0);
      Application->CreateForm(__classid(TCTRL), (&CTRL));

En pas daarna roep ik de ActiveX aan. Hopelijk heeft iemand hier nog wat aan :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan