0

私はjniを使用しているJavaアプリケーションに取り組んでいます。ここで、JNI メソッドから純粋な C++ 関数を呼び出したいと思います。以下のコードに示すように、私はこれをやっています。ここでdllが作成されますが、実行しようとするとエラー java.lang.UnsatisfiedLinkError: Can't finddependent libraries が表示されます。Visual Studio で dll を作成しています。C ++関数の呼び出しで何が間違っているのか教えてください。

これが私の.cppファイルのコードです

#include "SensorDetect.h"
#include <stdio.h>
#include <windows.h>
// Include specific Tools header
#include "Tools.h"
   // Include IO_XRayUSB_MD_VC80 header
#include "IO_XRayUSB.h"

// Include IO_XRayUSB_MD_VC80 library
#pragma message ("Using : IO_XRayUSB_MD_VC80.lib")
#pragma comment(lib, "IO_XRayUSB_MD_VC80.lib")

//// Custom user Callback function which is called by IO_XrayUsb when a device is plugged or unplugged
void _stdcall DevicePlugUnplugCallback(XRay_CALLBACK * pCallBackInfo, int nCallBackCount)
{
    if (pCallBackInfo && (nCallBackCount > 0))
    {
        for (int nDeviceIndex = 0; nDeviceIndex < nCallBackCount; nDeviceIndex ++)
        {
            switch(pCallBackInfo[nDeviceIndex].nState)
            {
                case XRAY_USB_PLUGGED_DEVICE :
                    printf("\n=>Callback Device: %s has been Plugged...\n\n", pCallBackInfo[nDeviceIndex].pcDeviceName);
                    break;
                case XRAY_USB_UNPLUGGED_DEVICE :
                    printf("\n=>Callback Device: %s has been Unplugged...\n\n", pCallBackInfo[nDeviceIndex].pcDeviceName);
                    break;
                default:
                    break;
            }
        }
    }
}


extern "C"
JNIEXPORT void JNICALL Java_sensordetect_SensorDetect_getDevice(JNIEnv * env, jclass cl)
{

     const int nNbMaxDevices = 10;
    char pDeviceList[nNbMaxDevices][260];
    int nDeviceCount = 10;
    XRay_HANDLE hDevice;
    XRay_SENSOR_INFO SensorInfo;


    //int nTriggerMode = GetChoice(1, "Choose Trigger Mode:\t0:XVIS_detection    1:TWI_request_detection");
    char pcBuffer[100];
    int nKey;

        nKey=0;

            int nTriggerMode=nKey;

    try
    {
        // XRay_RegisterCallBackPlugDevice to be notified of device plug/unplug
**//This function call creates problem in loading dll. error:Can't find dependent libraries**
     BOOL bSuccess = XRay_RegisterCallBackPlugDevice(DevicePlugUnplugCallback);    


        //for (int nIndex = 0; nIndex < 1; nIndex ++)
            printf("\tFound device : %s\n", pDeviceList[0]);

    }
    catch (...) // catch own CMyException
        {
            //e.ShowReason();
        }

    }
4

2 に答える 2

1

IO_XRayUSB_MD_VC80.dll依存関係のいずれかまたは 1 つが、PATH環境変数にリストされているディレクトリーのいずれにもないか、アプリケーションが実行されているディレクトリーと同じディレクトリーに存在しません。

DLL が依存する DLL のリストを取得するには、以下を使用できますdumpbin.exe

dumpbin.exe /DEPENDENTS C:\path\to\IO_XRayUSB_MD_VC80.dll

于 2012-05-14T10:01:32.120 に答える
1

プログラムを起動するときにオプションを指定するか-Djava.library.path=C:\path\to\DLLs、Windows に DLL のディレクトリを含めるようにしてくださいPATH

于 2012-05-14T10:06:29.790 に答える