Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

526
Views
Cómo manejar hablar con VB6 ActiveX dll que tiene dependencias OCX desde una aplicación .NET WPF

Tengo un dll ActiveX de VB6 que depende de ComDlg32.ocx. Esta dll ActiveX se llama desde una aplicación .NET. ActiveX dll tiene una interfaz pública que tiene 1 método, que abre un formulario, que abre un cuadro de diálogo Abrir archivo (de ComDlg32.ocx). La aplicación .NET tiene un botón que llamará a este método ActiveX dll.

Todo esto funciona cuando ComDlg32.ocx y ActiveX dll están registrados (a través de regsvr32), pero necesito que esto funcione usando RegFree COM, al menos para las dependencias de ActiveX dll. He creado un archivo de manifiesto para este ActiveX dll, pero parece que no se lee. ProcMon no tenía ninguna referencia al archivo de manifiesto y sxstrace no me dio información (literalmente, un archivo de texto en blanco cuando analicé el archivo etl).

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity name="DeployArchitectureTest" version="1.0.0.0" type="win32" processorArchitecture="x86"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <file name="COMDLG32.OCX"> <typelib tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" version="1.2" flags="control,hasdiskimage" helpdir="" /> <comClass clsid="{F9043C85-F6F2-101A-A3C9-08002B2F49FB}" tlbid="{F9043C88-F6F2-101A-A3C9-08002B2F49FB}" progid="MSComDlg.CommonDialog.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,onlyiconic,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,setclientsitefirst"> <progid>MSComDlg.CommonDialog</progid> </comClass> </file> </assembly>

Probé un manifiesto externo para el dll y también incrusté el manifiesto, pero aún no tuve suerte. Debo estar perdiendo algo, pero toda la información que puedo encontrar habla sobre cómo crear un archivo de manifiesto para un exe, pero no hay información sobre cómo manejar un DLL de ActiveX que tiene sus propias dependencias.

Si alguien tiene alguna información, se lo agradecería mucho.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Después de investigar un poco más y de que @SimonMourier y @HansPassant me indicaran la dirección correcta, logré que esto funcionara.

Pensé que habría sido posible un manifiesto dll si estuviera usando el ID de recurso n. ° 2 como mencionó @HansPassant, pero no pude hacer que funcionara de esa manera. No importa lo que hice, el manifiesto dll nunca pareció leerse.

Sin embargo, descubrí que incluir todos los datos del manifiesto de lo que era el manifiesto dll en el manifiesto exe y asegurarme de que el exe no tuviera un manifiesto incrustado permitía que RegFree COM funcionara como se esperaba. Descubrí que Visual Studio estaba creando mi .NET exe con un manifiesto incrustado, aunque había un archivo app.manifest como parte del proyecto. Tuve que configurar el COM dll como 'aislado = verdadero' para que el manifiesto se construyera como externo.

Así que gracias a @SimonMourier y @HansPassant, sus comentarios me guiaron por el camino correcto para resolverlo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!