MartyConnelly
martyconnelly at shaw.ca
Wed May 10 17:48:55 CDT 2006
I was just going to post this but the download from the article is
missing a comclass.zip
It is only 2 or 3 K, you need this to build any new classes. It is
installed by Visual Studio
but not VB Express. I don't have Visual Studio but found it in a msi
file downloadable
from this simlar article by same author. Just install it in the
directory indicated in the article
then it will appear in temporary templates in vb.Net IDE. It contains
the COM Class
template necessary for building new class projects.
Visual Basic Fusion: Best Practices to Use Visual Basic 6 and Visual
Basic .NET Together
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/vbbestprac.asp
However your problem maybe in the registering of the dll.
Two ways to do this
Install the project and open it in VB.Net, then do a Build this will
register the dll
with the com registry. There are step by step instuctions except for
doing the final build
in the first article. The build will also create a new tlb file.
In Access set a reference to the tlb file that will be in a directory like
below depending on where you installed the project.
C:\Access files\VBFusion\VB2005\FX20Wrapper\bin\Release\FX20Wrapper.tlb
The tlb will allow Access to see the class definitions and do a compile.
Then just run your routine
The other way is to use the included install.bat to register the dll
It uses regasm and gacutil to remove any previously named dll
and reinstall in the registry. Haven't tried this method.
But I have been having fun with it running .Net XML Text classes from Access
and SQL. Console.Write will come up something like a message box from
Access.
Imports System.Data.SqlClient
Imports System.IO
Imports System.Xml
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
#Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "e93440c0-fad6-478e-a01a-ad5965fcf9c4"
Public Const InterfaceId As String =
"1ecdb897-9d67-42b9-8465-7fc1d53119d6"
Public Const EventsId As String = "4c78673d-bb4e-4e26-aed0-2a14e06f2f44"
#End Region
' A creatable COM class must have a Public Sub New()
' with no parameters, otherwise, the class will not be
' registered in the COM registry and cannot be created
' via CreateObject.
Public Sub New()
MyBase.New()
End Sub
Public Function MainSQLTest()
MsgBox("MainSQL Start")
Dim cn As SqlConnection = New SqlConnection _
("Data Source=localhost;user id=sa;" & _
"pwd=gribnif;Initial Catalog=Pubs")
Dim authorCommand As SqlCommand = New SqlCommand("SELECT * FROM
Authors", cn)
Dim authorDA As SqlDataAdapter = New SqlDataAdapter()
authorDA.SelectCommand = authorCommand
cn.Open()
Dim authorDS As DataSet = New DataSet()
authorDA.Fill(authorDS, "Authors")
Dim sFileName As String = "c:\temp2\testsql.xml"
Dim xmlAuthor As String = authorDS.GetXml
MsgBox(xmlAuthor)
Dim srFile As StreamWriter = _
File.CreateText(sFileName)
srFile.WriteLine(authorDS.GetXml)
srFile.Close()
cn.Close()
Dim reader = New XmlTextReader(sFileName)
reader.WhitespaceHandling = WhitespaceHandling.None
'Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)
Case XmlNodeType.Text
Console.Write(reader.Value)
Case XmlNodeType.XmlDeclaration
Console.Write("<?xml version='1.0'?>")
Case XmlNodeType.Document
Case XmlNodeType.DocumentType
Console.Write("<!DOCTYPE {0} [{1}]", _
reader.Name, reader.Value)
Case XmlNodeType.EndElement
Console.Write("</{0}>", reader.Name)
End Select
End While
End Function
End Class
MastercafeCTV wrote:
>Hi Marty,
>have you try to construct any Vba code like the samples ping or ftp??
>I try today and i have installed on my computer Net Framework 2 and VB.net
>2005, but can't execute... the wrapper dll or anything..??
>
>Thanks
>
>Juan
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of MartyConnelly
>Sent: martes, 09 de mayo de 2006 21:45
>To: Access Developers discussion and problem solving
>Subject: [AccessD] Call .Net 2.0 Framework code from Access VBA
>
>
>This might be interesting and is fairly simple
>
>Call Into The .NET Framework From Existing Visual Basic 6.0 Apps
>http://msdn.microsoft.com/msdnmag/issues/06/05/WrapItUp/default.aspx
>
>This article adresses VB6 but there is no reason, it can't be used from VBA
>You will need VB Express installed along with .Net Framework 2.0 to create
>the wrapper dll. And perhaps register as COM object.
>
>It should save you using a lot of 3'd party controls by using the NET
>Framework class library instead. There are a lot of things that can be
>quickly written in .Net
>
>The .NET Framework classes must be called through a wrapper. The wrappers
>are built using the COM Class item in VB Express, and they behave like any
>other COM objects
>
>
>
--
Marty Connelly
Victoria, B.C.
Canada