konto usunięte

Temat: biblioteka procedur w vb.net skompilowana do DLL

Witam

Z góry uprzedzam, że jestem laikiem a nie programistą .NET, ale od jakiegoś czasu tworzę proste programy w VB. Jestem totalnym samoukiem.
Programy są mi potrzebne jako "makra" z obliczeniami itd dla pewnego programu.

Mam takie ogólne pytanie:
Potrafię sobie napisać program z pomocą Visual Studio, skompilować do do DLL i wywołać w moim programie.
Problem się pojawia, kiedy chciałbym w jednym projekcie w VB utworzyć sobie bibliotekę procedur i skompilować ją do jednego pliku DLL.
W moim programie mam odpowiednie polecenie, w którym podaję ścieżkę i nazwę DLLa oraz nazwę procedury/metody/podprogramu - nie wiem jak to fachowo nazwać.
Mam w ten sposób zrobione przykłady w C# (nie moje) i działa to poprawnie.
W ustawieniach projektu mam wybrane Application type: Class Library i Startup object: None.
Jedyna procedura jaką udaje mi się wywołać to ta, którą w VB jest zawarta w "Public Shared Sub Main()".
Nie wiem jak wywołać jakąkolwiek inną (pojedynczo)
Generowanie każdej procedury jako osobny DLL jest dla mnie zbyt uciążliwe, bo chodzi o zbiory po kilkadziesiąt procedur, a poza tym każdy DLL musi być "certyfikowany/podpisany" żeby działał w moim programie

Już długo szukałem w sieci rozwiązania ale bez znajomości fachowych pojęć nawet nie wiem czego szukam...

Oczywiście znam pobieżnie zasady jak używa się Sub i Function w zakresie jednego projektu w VB i już robiłem programy je zawierające. Teraz bardziej chodzi mi o taką bibliotekę funkcji/procedur/podprogramów
Wiktor P.

Wiktor P. Softwareentwickler
C++ / C#

Temat: biblioteka procedur w vb.net skompilowana do DLL

Moze twoje procedury/funkcje/metody nie sa typu 'Public' ? Jak nie, to sa niewidoczne dla programu, z ktorego chcesz je wywolac.
Tomasz M.

Tomasz M. never go full
retard!

Temat: biblioteka procedur w vb.net skompilowana do DLL

Też mi się wydaje, że masz je prywatne. Poza tym sprawdź czy są statyczne - jeśli nie ptorzebujesz klas, a tylko używasz parametryzacji do wywołań.

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

Edit: no chyba, że używasz modułów (zapomniałem, że vb ma :p)Ten post został edytowany przez Autora dnia 23.07.14 o godzinie 17:26

konto usunięte

Temat: biblioteka procedur w vb.net skompilowana do DLL

Do wywoływania procedur mam w swoim programie polecenie:
Run_user_function sciezka_i_nazwa_dll Nazwa_procedury_wewnątrz_DLLa
działa mi tylko dla nazwy procedury Main i tylko kiedy w VB wygląda ona tak:

Public Class Class1

Public Shared Sub Main()
(...tresc procedury...)
End Sub

Public Shared Sub Main1()
(...tresc procedury...)
End Sub

Public Shared Sub Main2()
(...tresc procedury...)
End Sub

End Class

Chciałbym móc też wywoływać z zewnątrz bezpośrednio również Main1 i Main2
Oczywiście nie wiem czy dobrze to wyżej zrobiłem - to jest jedyny sposób jaki mi zadziałał (ale tylko dla Main).

Dla porównania w C# mam taką bibliotekę działającą i mogę wywoływać procedury jak chcę:

public class Nazwa_class
{

public static int Procedura1(string[] args)
{
(...tresc procedury...)
return retValue;
}

public static int Procedura2(string[] args)
{
(...tresc procedury...)
return retValue;
}
}

I mogę dowolnie wywoływać Procedura1, Procedura2 itd (z dowolnymi nazwami) a w VB tylko tą jedną "Main".
Nie dysponuję niestety tego typu przykładem "biblioteki procedur" w VB

I niestety, w związku z tym że nie znam całej teorii, rządzącej programowaniem .NET nie potrafię jeszcze odpowiedzieć czy potrzebuję klasy, czy modułów i tego typu ogólne pytania.

Do tej pory zawsze z mojego systemu wywoływałem DLLa tylko raz i cała praca odbywała się zgodnie z tym co zaprogramowałem w VB. - to mi wychodzi nieźle i jestem z tym szczęśliwy...
Następnym krokiem (nieco inne zastosowanie, o czym nie chciałbym się rozpisywać) jest wielokrotne wywoływanie z mojego systemu wielu krótszych procedur. Wiem, że w C# da się tak zrobić, bo mam działający przykład i chciałbym też tak móc w vb.

Edit:
jeżeli próbuję wywołać inną procedurę niż Main, mam błąd z komunikatem brzmiącym:
"Brak wymaganego punktu wejścia w bibliotece. Nazwa funkcji Main2" (kiedy próbuję wywołać np Main2). komunikat jest taki sam niezależnie czy procedurę Main2 w ogólę utworzę czy nie (tak jakby nie widział nic poza procedurą Main)Ten post został edytowany przez Autora dnia 23.07.14 o godzinie 20:30

konto usunięte

Temat: biblioteka procedur w vb.net skompilowana do DLL

1. Spróbuj umieścić swój plik DLL w tym samym katalogu, gdzie masz plik uruchamiający program (.exe), który korzysta z tej DLL'ki
2. Jeśli punkt 1. nie pomoże, to zarejestruj DLL'kę w GACu (Global Assesmbly Cache) za pomocą GacUtilTen post został edytowany przez Autora dnia 24.07.14 o godzinie 09:08

konto usunięte

Temat: biblioteka procedur w vb.net skompilowana do DLL

Dzięki za starania. Najbliższy był chyba kolega Tomasz, bo wspomniał o modułach.
Po wieeelu godzinach prób i niepowodzeń moje oczekiwania spełniła taka struktura:

Module Module1

Function Procedura1(ByVal Param As String) As Integer
(...tresc1...)
Return 0
End Function

Function Procedura2(ByVal Param As String) As Integer
(...tresc2...)
Return 0
End Function

End Module

Teraz spokojnie mogę sobie wywoływać z zewnątrz Procedura1, Procedura2 itd... - wiem, że pewnie z nazwami pokręciłem, ale nie znam teorii
Żadne "Main" jako jedyny "entry point" już mi nie jest potrzebne :)

W Visual Studio utworzyłem nowy projekt Class Library, ale Class1.vb usunąłem i zamiast tego wstawiłem Module.
Nie wiem czy to jest zgodnie ze sztuką, ale tak mi działa i póki co będę się tego trzymał...

Następna dyskusja:

.netshrink - kompresor apli...




Wyślij zaproszenie do