Bazı yerel DLL'ler için bir C++/CLI sarıcı oluşturmaya çalışıyorum. Bu DLL'lerin yedisi ve daha fazlası var, bu yüzden bunları dinamik olarak yüklemem gerekiyor. Hepsinin aynı işlevleri vardır. Bu işlevleri yüklemek için yerel uygulamada LoadLibrary ve GetProcAddress harika çalıştı.Yerel işlevler için Sarıcı
Ne zaman bir DLL yükler ve Initialize çağrısı, AccessViolationException alırsınız. Platform x86 seçiliyken C# Console uygulamasıyla test ediyorum.
GÜNCELLEME: Neden oy verdiğimi bilmiyorum. Bu soruyu google aramalarımın hiçbirinde yanıtlanmadı. Sormadan önce yarım hafta aradım. Burada aynı şey hakkındaki tüm sorular farklı bir yöntem kullanıyor. MSDN, yerel etkileşimde AccessViolations'ın ciddi programlama hatalarının işareti olduğunu söylüyor. Neyi yanlış yaptığımı göremiyorum. İplerimi sıralıyorum ve aramadan önce nullptları kontrol ediyorum. Yük fonksiyonları işe yarıyor gibi görünüyor. Bilinen hatalı işlev adlarını ya da bildiğim bir DLL yolunu yanlışsa, yükleme işleminin başarısız olduğunu söyler. Doğru yollara/işlev adlarına koyarsam, her şeyin işe yarayacağını söyler, ancak aramaya çalıştığımda çöker. Ben DLL i'm test için TSInit işlevi, aslında bu DLL herhangi bir şey yapmaz, ancak aynı arabirim ile diğer DLL'ler için bazı gerçek iş yapabilir.
Güncelleme 2:
bu çözümsüz olduğunu düşünüyorum. Dediğim gibi, aynı arayüze sahip birkaç DLL var. Şimdi, bazılarının işe yaradığını öğrendim, bazıları değil. Hepsini x86 derlediklerinden ve olduklarından emin olmak için hepsini dumpbin ile kontrol ettim. Çalışmama DLL'lerinde yanlış olan emin değilim. Yerel C++ uygulamalarında, hepsi beklendiği gibi çalışır. Bu kuralları çağıran bir sorun olabilir
Böyle belirsiz bir soru için tanılama sağlayamıyorsunuz. LoadLibrary() kullanarak * değil * başlayın, bunun için hiçbir anlamı yoktur. Sadece bu DLL'lerin içe aktarma kitaplıklarını bağlayın ve ilgili .h dosyalarını dahil edin. Üç daha az arıza modu. –
Erişim İhlalleri sihir değil. Örneğin bir yığın iziniz var. – MSalters