在c ++

时间:2016-08-23 14:47:56

标签: c++ dll linker java-native-interface dllimport

我使用第三方.dll库时遇到问题: 该库有一些类,我需要在我的Java应用程序中通过JNI在我编译的.dll中使用这些方法。 我试图宣布这样的事情:

#ifdef SERVER_EXPORTS
#define SERVER_API __declspec(dllexport) 
#else
#define SERVER_API __declspec(dllimport) 
#endif

namespace MYDLLNAMESPACE
{
class SERVER_API IServer
{
public:
     int NFun(int func);
};

class SERVER_API ServerClass : public IServer {
public:
    ServerClass();
    int NFun(int func) {
        return MYDLLNAMESPACE::ServerClass::NFun(func);
    }
};
}

Ant然后在代码中使用它:

IServer *Myserv = new Server();
int a = Myserv->NFun(5007);
return a;

但它出现错误"错误LNK2019:未解析的外部符号" __ declspec(dllimport)public:int __thiscall MYDLLNAMESPACE :: IServer:"

我需要做类似的事情:

Iserver myServer = new Server(); int result = myServer.do_smth(); return result;

其中服务器 MYDLL.dll - >命名空间MYDLLNAMESPACE - > class Server

有什么方法可以做到吗?

P.S。我没有第三方的.h文件的任何.lib .dll

修改 现在我有了Server.h文件:

namespace NS {
class __declspec(dllexport) ServerClass
{
public:
    ServerClass() {
    }
   const char* GParam(const char* key);
  const char* SParam(const char* key, const char* value);
};
}

我的Impl.cpp文件,我在那里尝试'实例化ServerClass并使用其方法' GParam'像这样:

ServerClass *serv = new ServerClass();
const char* str = serv->GParam("LastErrorTxt");

但它转到StackOverFlowException,好像是 serv-> GParam(" LastErrorTxt")正在执行而不是dll类实现

1 个答案:

答案 0 :(得分:0)

使用com4j解决了问题: 的 http://com4j.kohsuke.org/