在c++中使用导入的dll内部类方法

Use imported dll inner class methods in c++

本文关键字:dll 内部 类方法 导入 c++      更新时间:2023-10-16

我有一个问题使用第三方。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);
    }
};
}

然后在代码中使用它:

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

但它会出现错误"error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall MYDLLNAMESPACE::IServer:"

我需要这样做:

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

where Server is MYDLL.dll -> namespace MYDLLNAMESPACE -> class Server

有什么方法可以做到吗?

注:我没有任何。lib或。h文件的第三方。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类实现

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