import C# DLL knihovny do VB.NET   otázka

VB.NET, Office

Snažím se knihovnu napsanou v C# importovat do VB.NET či VB v Excelu, stále je problém s System.EntryPointNotFoundException. Co dělám špatně?

VB.NET

Private Declare Function OpenPort Lib "Moje.dll" (ByVal retezec As String, ByVal baudrate As Integer) As Boolean

C#

namespace Moje
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class Moje
    {
         public void fOpenPort(string PortName, int BaudRate)
        {
            ....
        }
    }

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem trochu pokročil, takto už práce s DLL funguje, ale pouze pod VB.NET, nyní potřebuji poradit jak na Excel.

Dim knihovna As New Moje.Moje
knihovna.fOpenPort("COM1", 9600)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

.NET knihovnu normálně ve VB6 (VBA) použít nelze. Jediný způsob jak to udělat, je .NET knihovnu udělat tak, aby byla použitelná přes COM rozhraní a to obnáší spoustu věcí. Nastavení atributů u tříd a projektu, export typové knihovny, registrace rozhraní do registru (nutné provést na každém počítači, kde to bude použito). Už se to tady někde řešilo, zkuste hledat.

Pokud používáte novější aplikace Office (2003+), použil bych Visual Studio Tools for Office, kde lze pro aplikace Office vyvíjet přímo .NET řešení bez nutnosti VBA.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za rady, návod na http://vbnet.cz/forum-tema--2338-vytvore... v mém případě bohužel nefunguje, ač je knihovna registrována Excel ji nezná.

K registraci jsem použil toto:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe D:\Moje.dll

Bohužel mám stejný problém jako kolega, snažím se napsat novou knihovnu do už hotové aplikace, ale netuším jak ji přeložit do "formátu" vhodného pro tuto aplikaci(aplikaci není možné měnit).

Našel jsem toto: http://support.microsoft.com/kb/828736/e... ale o moc moudřejší nejsem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není to tak jednoduché jak si zřejmě myslíte. Assembly musí splňovat určité podmínky a je potřeba znát i další věci. Nastudujte níže uvedený odkaz, je tam vše potřebné a návod jak to udělat.

http://msdn.microsoft.com/en-us/library/...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, dokumentaci jsem si přečetl, ale stejně jsem moc nepokročil. Mohu Vás požádat o jednodušší postup jak vytvořím DLL knihovnu která bude napsaná v .NET ale bude ji možné používat v Excelu nebo v původním programu pomocí tohoto

Private Declare Function OpenPort Lib "Moje.dll" () As Boolean

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud jste nepochopil mnou zmiňovaný článek, pak vám asi není pomoci. Připadá mi, že nevíte co chcete. Ve VBA (nebo VB6) existují dva způsoby, jak využívat knihovny třetích stran.

První způsob je pomocí vytvoření a ovládání instance COM objektu, což je i způsob v mnou uvedeném článku. Tímto způsobem lze využívat i knihovny napsané v .NET jazycích.

Druhý způsob je tzv. Platform Invoke, což je právě to co jste teď uvedl, a týká se to pouze nativních knihoven napsaných v C++ (nebo jiném unmanaged jazyce), které mají uvnitř exportovatelné funkce. Druhý způsob je nesrovnatelně složitější.

Žádný jednodušší způsob neexistuje.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback