Toon posts:

[VB6/C#.NET-DLL]Gebruik .NET DLL in VB6 programma

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een DLL die door iemand anders is geschreven in C#. Deze dll heeft functies die ik wil gebruiken in mijn VB6 applicatie.
Nu ben ik al een poosje aan het lezen hoe dit gedaan moet worden en heb ik het volgende al geprobeerd.
Omdat ik beschik over de sourcecode van de dll, heb ik die opnieuw gecompileerd maar nu met de optie 'Register for COM interop' aan.

Ik kopieer de dll (MapWinX.dll) in mijn mapje waarin mijn sourcecode van vb6 staat. Voor de zekerheid heb ik ook MapWinX.pdb, MapWinX.tlb en MapWinX.xml mee gekopieerd.

In VB6 doe ik het volgende:
code:
1
2
Dim x As Object
    Set x = CreateObject("MapWinX.ClipLineSFWithPoly")

Maar dan krijg ik de volgende foutmelding:
Error 429 (ActiveX component can't create object)

ClipLineSFWithPoly is in de dll gedefineerd als 'internal class'

Is dit de juiste manier om het voor elkaar te krijgen of moet ik nog wat zaken wijzigen in de dll?

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Moet je niet eerst een reference aanmaken?

Verwijderd

PolarBear schreef op maandag 12 juni 2006 @ 12:15:
Moet je niet eerst een reference aanmaken?
Hij gebruikt Late binding ( createobject... ) dus hij heeft geen reference nodig.
Maar hij moet volgens mij wel eerst de DLL registreren door middel van Regsvr32 !

Verwijderd

Topicstarter
Ik dacht dat .NET DLL's niet meer geregistreerd hoefde te worden.

Maar als ik de dll registreer krijg ik de melding dat de DllRegisterServer entrypoint niet gevonden kon worden.

Dit is mijn batchfile:
code:
1
2
3
cd %cd%
regsvr32 /u /s MapWinX.dll
regsvr32 MapWinX.dll

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Die class is internal? Dan mag je er toch ook niet bij komen? Je mag hem dan alleen binnen de DLL gebruiken.

Skill is when luck becomes a habit.


  • tijn
  • Registratie: Februari 2000
  • Laatst online: 19-02 13:45
Wanneer je .NET dll's vanuit b.v. VB6 wilt gebruiken moet je ze eerst in de Global Assembly Cache installeren met gacutil en daarna kun je de dll registreren via regasm ipv regsvr32. Na het registreren is de dll beschikbaar voor COM gebruik.
De .NET dll moet overigens wel gesigned zijn met een strong name anders kan hij niet in de GAC geinstalleerd worden.

Zie verder dit artikel voor alle ins en outs.

[ Voor 37% gewijzigd door tijn op 12-06-2006 13:39 ]

Cuyahoga .NET website framework


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je moet regasm gebruiken, niet regsvr32.
edit:

spuit 11... :P

[ Voor 30% gewijzigd door bigbeng op 12-06-2006 13:32 ]


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19-02 14:18

pjvandesande

GC.Collect(head);

tijn schreef op maandag 12 juni 2006 @ 13:31:
Wanneer je .NET dll's vanuit b.v. VB6 wilt gebruiken moet je ze eerst in de Global Assembly Cache installeren
Nee, GAC is nooit verplicht en registratie is alleen verplicht als je ook early binding wilt en niet op Windows XP draait.

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

punt is dat je zowiezo geen internal classes kan gaan createn vanuit jouw app, je zult die class als public moeten declareren.

C#:
1
2
3
4
5
6
7
namespace <naam>
{
    internal class <classnaam>
    {
        // code
    }
}

veranderen naar
C#:
1
2
3
4
5
6
7
namespace <naam>
{
    public class <classnaam>
    {
        // code
    }
}


(het is mogelijk dat je geen namespace in je source hebt, dan die gewoon wegdenken)

[ Voor 56% gewijzigd door MLM op 12-06-2006 16:27 ]

-niks-

Pagina: 1