Sitter och sliter mitt gråa hår med att få till en dll koppling mellan .Net och VB6. 1) Är funktionerna publika? Har du skapat ett publikt Interface som heter något bra, som din klass implementerar? Har du testat att registera den enligt den gamla goa principen med regsvr32?? Så här ser mitt program ut: OCH då frågar jag igen: Du har så rätt så Mikael Wedham. Dessutom hade jag överarbetat lite när det gällde strong name, det behövs inte. Så ser mitt program ut nu. Perfekt!Anropa en vb.net dll från vb6
Har hittat en del intressanta tips på webben, men ingen som gör att jag får till det ordentligt. Jag har en applikation, troligen skriven i C++ eller nåt liknande, den applikationen kan göra anrop mot DLL om dessa följer en viss norm.
Nu skall min DLL anropa en webservices som återfinns på en annan dator där ute nånstans.
Att jobba med webservices från .Net är ju så enkelt att det inte är sant, att göra samma sak från vb6 är ju betydligt svårare, därav vill jag göra min lösning i .NET.
Har provat att göra en dll i vb6 och låtit .Net konvertera den till .Net, men sedan går det inte längre.
Efter att jag skapat DLL-sourcen, kör jag bla:
sn för att få ett strong name
jag kompilerar i batch via vbc
jag kör gacutil och sist så kör jag regasm.
Dll dyker upp i mitt vb projekt, jag ser modulen och klassen, men jag ser inte funktionerna.
Hilfe, som tysken säger.
/StefanSv: Anropa en vb.net dll från vb6
2) Är funktionerna statiska eller inte? (Static)
Om ja: Har du skapat en instans av klassen först? (set obj = New Klass)
Om Nej: Du använder väl: Klass.Funktion(), inte obj.Funktion()?Sv:Anropa en vb.net dll från vb6
VB6 (COM) kan bara anropa Interface, inte klasser.
/mickeSv: Anropa en vb.net dll från vb6
// Mikael SandSv:Anropa en vb.net dll från vb6
Option Explicit On
Namespace NetDll
Public Class Bil
Public Sub BMW()
MsgBox("BMW")
End Sub
Public Sub Saab()
MsgBox("Saab")
End Sub
End Class
End Namespace
Jag vill får inte fram att BMW finns under klassen bil.Sv: Anropa en vb.net dll från vb6
Har du skapat och implementerat ett interface i din .NET klass. Det MÅSTE du göra för att COM kan inte anropa klasser, utan bara inteface.
Hur du gör det (ett eget interface eller AutoDual) är ju upp till dig, men du MÅSTE ha ett interface.
/mickeSv:Anropa en vb.net dll från vb6
Public Interface iBilar
Function BMW() As String
Function Saab() As String
End Interface
Public Class Bilar
Implements iBilar
Public Function BMW() As String Implements iBilar.BMW
BMW = "BMW"
End Function
Public Function Saab() As String Implements iBilar.Saab
Saab = "Saab"
End Function
End Class
Man måste sätta register for COM Interop till true.
Efter kompilering gör man:
<code>
regasm iBilar.dll
</code>
Sist men inte minst mitt VB program:
Private Sub Form_Load()
Set bilClass = New iBilar.Bilar
Set bil = New Bilar
MsgBox bil.BMW
End Sub
Om du nu startar vb programmet så kommer det att bli en BMW som syns.
Sv: Anropa en vb.net dll från vb6
Tack för ett tydligt exempel av det fungerande :)
/micke