[英]Which configuration do I need to use an external DLL in a WinForms application?
我正在使用外部DLL來使用我編寫的包裝器來使用OCR設備。 我已經對包裝器進行了測試,效果很好。 但是,當我使用WinForms項目來使用包裝器的客戶端類(位於另一個項目)時,調用從DLL導入的C#方法時出現錯誤(使用[DLLImport(...)]
),說DLL是未注冊。
錯誤說:
“找不到DLL庫函數。檢查注冊表安裝路徑。”
所有執行都是在調試模式下完成的。 我比較了兩個項目的配置。 最相關的區別是Test項目面向Any CPU和WinForms app只指向x86。
會是什么呢?
更新
Regsvr32.exe
注冊該DLL,但它不起作用。 我想過使用Gacutil.exe
但是需要卸載.net framework 1.1以外的所有框架... ObjectContext
的調用加載組合框並再次出現錯誤時...我正在使用連接到Oracle的實體框架。 我有一個理論。
讓我們假設以下情況:
然后,在運行時,可能會發生這種情況:
歡迎來到DLL地獄。 所以,你可以做什么?
因此,對DLL的調用只能從一個按鈕進行,但它不適用於復雜的形式。 我會說有一個未定義的行為正在發生。 問題仍然是你是不是寫錯誤的編組,或者編寫錯誤的DLL。
由於我們無法訪問DLL的源代碼,您可以發布函數的原型,所有相關的結構定義以及您為其編寫的DllImport行嗎?
谷歌無法找到錯誤信息,這意味着(不是絕對:) :)它不是系統消息,而是來自dll代碼的自定義消息。 所以dll做了一些狡猾的事情。 我想它會嘗試在內部將您的調用重新調度到另一個函數。
我建議你嘗試的幾件事情:
運行x86配置。 在項目屬性 - >構建選項卡中,將平台設置為x86。 這假設dll是x86 dll。
dumpbin / headers orc.dll
File Type: DLL FILE HEADER VALUES 14C machine (**x86**) 4 number of sections 4CE7B6FC time date stamp Sat Nov 20 11:54:36 2010 0 file pointer to symbol table 0 number of symbols E0 size of optional header 2102 characteristics Executable 32 bit word machine DLL
這個命令行應該告訴你位數。 如果它是64位運行64位配置,但我敢打賭它是32位。
其中ocr.dll
應該告訴你dll在哪里。 如果它沒有將安裝dll的文件夾添加到%PATH%。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.