Почему dll не запускается, если VS2010 не существует? - PullRequest
0 голосов
/ 18 июля 2011

Я написал dll на VS2010, и я буду вызывать его из JAVA с помощью JNA. Но он не запускается, если VS 2010 не существует на компьютере. Выдает ошибки

Исключение в потоке "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Невозможно загрузить библиотеку 'C: \ Users \ hasan \ Desktop \ cv-2dll.dll': указанный модуль не может быть найден. в com.sun.jna.NativeLibrary.loadLibrary (NativeLibrary.java:166) в com.sun.jna.NativeLibrary.getInstance (NativeLibrary.java:239) в com.sun.jna.Library $ Handler. (Library.java:140) в com.sun.jna.Native.loadLibrary (Native.java:393) в com.sun.jna.Native.loadLibrary (Native.java:378) в hsv.HSVHistogram.main (HSVHistogram.java:24) в hsv.HSVView.jButton1ActionPerformed (HSVView.java:231) в hsv.HSVView.access $ 900 (HSVView.java:25) в hsv.HSVView $ 5.actionPerformed (HSVView.java:134) в javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:1995) в javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton.java:2318) в javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387) в javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:242) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java:236) в java.awt.Component.processMouseEvent (Component.java:6288) в javax.swing.JComponent.processMouseEvent (JComponent.java:3267) в java.awt.Component.processEvent (Component.java:6053) в java.awt.Container.processEvent (Container.java:2041) в java.awt.Component.dispatchEventImpl (Component.java:4651) в java.awt.Container.dispatchEventImpl (Container.java:2099) в java.awt.Component.dispatchEvent (Component.java:4481) в java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4577) в java.awt.LightweightDispatcher.processMouseEvent (Container.java:4238) в java.awt.LightweightDispatcher.dispatchEvent (Container.java:4168) в java.awt.Container.dispatchEventImpl (Container.java:2085) в java.awt.Window.dispatchEventImpl (Window.java:2478) в java.awt.Component.dispatchEvent (Component.java:4481) в java.awt.EventQueue.dispatchEventImpl (EventQueue.java:643) в java.awt.EventQueue.access $ 000 (EventQueue.java:84) в java.awt.EventQueue $ 1.run (EventQueue.java:602) в java.awt.EventQueue $ 1.run (EventQueue.java:600) в java.security.AccessController.doPrivileged (собственный метод) в java.security.AccessControlContext $ 1.doIntersectionPrivilege (AccessControlContext.java:87) в java.security.AccessControlContext $ 1.doIntersectionPrivilege (AccessControlContext.java:98) в java.awt.EventQueue $ 2.run (EventQueue.java:616) в java.awt.EventQueue $ 2.run (EventQueue.java:614) в java.security.AccessController.doPrivileged (собственный метод) в java.security.AccessControlContext $ 1.doIntersectionPrivilege (AccessControlContext.java:87) в java.awt.EventQueue.dispatchEvent (EventQueue.java:613) в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:269) в java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:184) в java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:174) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:169) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:161) в java.awt.EventDispatchThread.run (EventDispatchThread.java:122)

1 Ответ

0 голосов
/ 18 июля 2011

Возможно, вашей DLL нужны библиотеки времени выполнения C / C ++. На компьютере без установленной Visual Studio 2010 их, вероятно, нет.

Попробуйте скомпилировать свою DLL, чтобы библиотека времени выполнения C / C ++ была статически связана с DLL. Откройте страницу свойств для вашего проекта DLL в VS 2010, затем выберите поддиалог «Свойства конфигурации» -> C / C ++ -> «Генерация кода» и выберите «Многопоточная» (/ MT) или «Многопоточная отладка» (/ MTd). После перекомпиляции и повторной компоновки библиотеки DLL она должна работать в системах без библиотек времени выполнения VS 2010.

...