Inhaltsverzeichnis
5.1 P/Invoke - Integracija DLL-ova
Ova stranica pokazuje kako koristiti OpenSSL putem P/Invoke u .NET-u.
Što je P/Invoke?
P/Invoke (Platform Invoke) omogućuje pozivanje nativnih DLL funkcija iz .NET-a:
.NET Kod → P/Invoke → libcrypto-3-x64.dll → OpenSSL
Pripremite DLL-ove
1. Kopirajte DLL-ove u Projekt
cd MojProjekt copy "D:\Projects\openssl-3.6.0\bin\bin\libcrypto-3-x64.dll" .\ copy "D:\Projects\openssl-3.6.0\bin\bin\libssl-3-x64.dll" .\
2. Izmijenite .csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> </PropertyGroup> <ItemGroup> <!-- OpenSSL Native Libraries --> <None Update="libcrypto-3-x64.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="libssl-3-x64.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> </Project>
Jednostavan P/Invoke Primjer
using System; using System.Runtime.InteropServices; namespace MojProjekt; public static class OpenSslInterop { private const string LIBCRYPTO = "libcrypto-3-x64.dll"; // Inicijalizacija [DllImport(LIBCRYPTO, CallingConvention = CallingConvention.Cdecl)] public static extern int OPENSSL_init_crypto(ulong opts, IntPtr settings); // Dohvati verziju [DllImport(LIBCRYPTO, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr OpenSSL_version(int type); // Konstante public const int OPENSSL_VERSION_STRING = 6; public const ulong OPENSSL_INIT_LOAD_CRYPTO_STRINGS = 0x00000002; public const ulong OPENSSL_INIT_ADD_ALL_CIPHERS = 0x00000004; public const ulong OPENSSL_INIT_ADD_ALL_DIGESTS = 0x00000008; public static void Initialize() { OPENSSL_init_crypto( OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ADD_ALL_CIPHERS | OPENSSL_INIT_ADD_ALL_DIGESTS, IntPtr.Zero); } public static string GetVersion() { var ptr = OpenSSL_version(OPENSSL_VERSION_STRING); return Marshal.PtrToStringAnsi(ptr) ?? "Unknown"; } } // Uporaba: class Program { static void Main() { OpenSslInterop.Initialize(); Console.WriteLine($"OpenSSL Verzija: {OpenSslInterop.GetVersion()}"); } }
Česte Greške
"DLL not found"
System.DllNotFoundException: Unable to load DLL 'libcrypto-3-x64.dll'
Rješenje:
- DLL-ovi prisutni u izlaznom direktoriju (bin/Debug/)?
- .csproj
CopyToOutputDirectoryispravan? - Platforma ispravna? (x64 vs x86)
"Entry point not found"
System.EntryPointNotFoundException: Unable to find entry point 'XYZ'
Rješenje:
- Ime funkcije ispravno napisano?
CallingConvention.Cdeclpostavljen?- Verzija OpenSSL-a podržava funkciju?
Nastavite na
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: 29.01.2026. u 21:30