0

当我尝试将 JNI 与我创建的 DLL 一起使用时,我遇到了一个问题。

我创建了一个名为 InfraredTest.dll 的 DLL。这个 dll 引用了另一个,称为 RedRat.dll。当我尝试使用 InfraredTest.dll 中使用 RedRat.dll 函数的函数时,我收到来自 JVM 的致命错误。

观察: 1 - 我已经测试了 RedRat.dll 链接,创建了 InfraRedTest.exe,并且它使用相同的代码可以正常工作。2 - 我已经在没有调用 RedRat.dll 的情况下使用 JNI 测试了 InfraRedTest.dll,并且工作正常。

我可以看到问题在于找不到 RedRat.dll。我把第一个 DLL 放在同一个地方,并且还收到了 JVM 崩溃。

这是代码:

#include "IRWrapper.h"  
#include <iostream>

using namespace std;
using namespace RedRat;
using namespace RedRat::RedRat3;
using namespace RedRat::RedRat3::USB;

JNIEXPORT void JNICALL   
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)  
{  
    printf(" --- Calling IRWrapper.dll --- \n");

    array<LocationInfo^>^ rr3Li = RedRat3USBImpl::FindRedRat3s();
    if (rr3Li->Length == 0)
    {
        printf("No RedRats found.");
    }   else {
        printf("Found: %d devices.\n",rr3Li->Length);
    }
    return;  
}  
4

1 回答 1

1

InfraredTest.dll可能与RedRat.lib. 在您的观察中,我没有看到最重要的测试场景:模拟整个调用链。有CallingTheSameFunctionsLikeJava.exe,哪个叫InfraredTest.dll,那个叫RedRat.dll。使用您现有的测试,您总是只测试一个链环。我敢打赌,一旦这个测试 exe 正常工作,JNI 也不会再有问题了。如果 Java 模拟的 exe 仍然存在问题,请再次发布问题,但不要使用JNI.

于 2012-11-15T16:59:03.417 回答