jus*_*tin 5 c++ dll explicit class
我正在尝试显式链接 DLL。除了 DLL 文件本身以及有关类及其成员函数的一些文档之外,没有其他资源可用。
从文档来看,每个类都有自己的
typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Arrayenum Server::Role {NONE,HIGH,LOW}void Server::connect(const StringArray,const KeyValueMap), void Server::disconnect()实现来自谷歌搜索的代码,我设法加载可以调用断开连接函数的dll。
目录.h
LPCSTR disconnect = "_Java_mas_com_oa_rollings_as_apiJNI_Server_1disconnect@20";
LPCSTR connect =
"_Java_mas_com_oa_rollings_as_apiJNI_Server_1connect@20";
Run Code Online (Sandbox Code Playgroud)
我从depends.exe 中获取了上面的函数名称。这就是 C++ 中所谓的修饰/修饰函数名称吗?
主程序
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include "dir.h"
typedef void (*pdisconnect)();
int main()
{
HMODULE DLL = LoadLibrary(_T("server.dll"));
pdisconnect _pdisconnect;`
if(DLL)
{
std::cout<< "DLL loaded!" << std::endl;
_disconnect = (pdisconnect)GetProcAddress(DLL,disconnect);
if(_disconnect)
{
std::cout << "Successful link to function in DLL!" << std::endl;
}
else
{
std::cout<< "Unable to link to function in DLL!" << std::endl;
}
}
else
{
std::cout<< "DLL failed to load!" << std::endl;
}
FreeLibrary (DLL);
return 0;}
Run Code Online (Sandbox Code Playgroud)
我如何调用(例如)具有在 dll 本身中声明的参数数据类型的 connect成员函数?
编辑
更多信息:
我的同事正在根据给出的Java示例使用Java实现接口,而我被要求使用C++实现。该DLL来自第三方公司。
我会向他们询问编译器的情况。我应该从他们那里得到任何其他信息吗?
我快速阅读了有关 JNI 的内容,但我不明白它在这种情况下是如何实现的。
更新
我有点困惑...(好吧,好吧...非常困惑)
我试图使用第一篇文章中描述的连接功能。从 Depends.exe DLL 输出中,
这与我的编译器(VS 2005)中的map和vector的成员函数不同...
任何想法?或者我在这里得到了错误的图片......
除非您使用反汇编程序并尝试从汇编代码中找出参数类型,否则您不能。这些信息并不存储在 DLL 中,而是存储在 DLL 附带的头文件中。如果您没有它,则该 DLL 可能不适合您使用。