Spędziłem wiele godzin starając się korzystać z funkcji C# w mojej aplikacji Java, ale nie miał powodzenia ... napisałem następujący lib w C#:Jak używać funkcji C# w Java przy użyciu JNA lib
public class Converter
{
public Converter()
{
}
public bool ConvertHtmlToPdf(String directoryPath)
{
//DO SOMETHING
}
}
Ta biblioteka dll wywołuje inną bibliotekę DLL w celu wykonania niektórych operacji, ale kiedy ją skompiluję, mogę znaleźć biblioteki DLL w folderze Realse i wszystko wydaje się być w porządku, więc skompilowałem je przy użyciu opcji 32-bitowej, 64-bitowej i Dowolnej CPU, aby upewnić się, że to nie mój problem.
Analizing moje pliki dll z Dependency Walker w 32-bitowy procesor i Każda opcja mówi, że IESHIMS.DLL nie można znaleźć, i pokazać wiadomość:
Ostrzeżenie: Przynajmniej jeden moduł zależność opóźnienie obciążenia nie było uznany. Ostrzeżenie: co najmniej jeden moduł ma nierozstrzygnięty import z powodu brakującej funkcji eksportu w module zależnym od opóźnienia.
Nie występuje z plikiem 64-bitowym, niestety nie mogę znaleźć funkcji ConvertHtmlToPdf.
Ponieważ nie wiem, czy jest to istotne, czy nie, mój drugi krok był w Kodzie Java.
Aby załadować moją bibliotekę zrobić:
System.setProperty("jna.library.path", "C:\\Program Files (x86)\\Facilit\\Target App\\lib");
i:
public interface IConversorLibrary extends Library {
IConversorLibrary INSTANCE = (IConversorLibrary) Native.loadLibrary("converter", IConversorLibrary.class);
void ConvertHtmlToPdf(String directoryPath);
}
(lib wydaje się być obciążenie udany, bo gdy próbuję usunąć plik dll z moja aplikacja działa ona mówi które nie mogą być usunięte, bo to jest w użyciu) i wreszcie:
IConversorLibrary.INSTANCE.ConvertHtmlToPdf(directoryPath);
ale res ULT nie jest naprawdę tak życzę:
java.lang.UnsatisfiedLinkError: Error looking up function 'ConvertHtmlToPdf': Could not find the specified procedure.
nie wiem, co robię źle, próbowałem wiele tutoriali i wiele rzeczy, ale wszystko wydaje się działać, każda pomoc jest bardzo ceniona.
Ustawianie 'jna.library.path' nie jest tak naprawdę dzieje się wpływa na JNA; należy zamiast tego ustawić "% PATH%". To ostatnie ma wpływ na ładowanie bibliotek współdzielonych, czego nie ma 'jna.library.path'. – technomage
Jeśli nazwa funkcji nie jest wymieniona na liście zależność zależności, JNA na pewno nie będzie w stanie go znaleźć. – technomage
JNA można załadować z bibliotek DLL, które używają połączenia C. Klasa C# nie obsługuje domyślnie żadnego rodzaju powiązania C. C++ wspiera C-link z notacją "extern" C ". – technomage