Önce durumumu açıklayacağım. Benim için bir kara kutu olan bir DLL kitaplığı var. Hangi dilde yazıldığından emin değilim. Benim tahminim C++ veya hatta C, ama bilmiyorum. Ama ben DLL işlevleri biliyorum, bu yüzden nasıl kullanılacağını biliyorum.C# Dll statik ve dinamik bağlama
Tamam. İşletmelere doğru. Yukarıda sözü edilen DLL ile çalışacak olan C# .NET'i yazıyorum. Tüm yöntemleri bana bağlantı yöntemleri denedim ama sadece bir çalışma:
- Statik:
[DllImport("myDll.dll")]
- Bu çalışır. - Dinamik: Kernel32.dll tarafından YüklemeLibrary/FreeLibrary - 126 -
The specified module could not be found
koduyla istisna yapıyorum. Bu sorun eksik bağımlılık içinde yatıyor. - Dinamik: Yansıma - Assembly.LoadFile (aPathFileName) kullanırken, istisna yapıyorum:
The module was expected to contain an assembly manifest
.
Sorunum, bir çeşit yapılandırma dosyasında kara kutuma dll yolunu belirtmem gerektiğidir. Şimdi ne yapabilirim diye bir ipucu isteyebilir miyim, bu sorunu nasıl çözebilirim? Daha spesifik: Yapılandırma dosyasından dize yüklemenin ve sabit bir dizgeyi doldurmak için statik yolla DllImport (const string path); ya da bilmiyorum dinamik bağlantı dll başka yolu var mı? i kullanamaz yöntemlere bu soruya referans Hem cevaplar: Başka bir soruya olası kopya etmek
DÜZENLEME
Cevap. Dediğim gibi, LoadLibrary (exception 126) kullanamıyorum ve aynı zamanda hardcoded olası yolları yağmalayamıyorum (config dosyasından yükleme yoluna ihtiyaç duyduğumu söyledim)
Bu diğer gönderi işe yarayabilir! Ben kernel32.dll SetDllDirectory çağırmak ve statik DllImport tarafından bağlı benim kara kutu dll yöntemini çağırmadan önce, config dosyasından yolunu doldurun! Denerim ve uygun cevabı yazarım. – user1916778