我想明确地与DLL链接。 没有其他的资源是除了DLL文件本身和有关类及其成员函数的一些可用文档。
从文档,每个班都有自己的
- 成员的typedef
例如:typedef std::map<std::string,std::string> Server::KeyValueMap, typedef std::vector<std::string> Server::String Array
- 成员枚举
例如:enum Server::Role {NONE,HIGH,LOW}
- 成员函数
例如:void Server::connect(const StringArray,const KeyValueMap), void Server::disconnect()
实施从谷歌搜索的代码,我管理加载DLL可以调用断开功能..
dir.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";
从我得到的Depends.exe上面的函数名。 这是所谓的C ++装饰/错位的函数名?
main.cpp中
#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;}
我如何调用(例如),其中有在DLL本身声明的参数的数据类型的连接成员函数?
编辑
更多信息:
- 该DLL来使用Java示例实现。 Java示例包含使用SWIG和源代码生成一个Java包装。
- 该文档列出了所有阶级,他们的成员函数以及它们的数据类型。 根据该文档,从C ++源代码生成的列表。(?)
- 没有其他的信息给予(在使用什么编译器生成的DLL没有资料)
我的同事是基于给定的Java实现例如使用Java接口,而有人问我用C ++实现的。 该DLL是从第三方公司。
我会问他们的编译器。 任何其他信息,我应该从他们身上得到什么?
我有一个快速通读有关JNI,但我不知道它是如何在这种情况下实现的。
更新
我有点糊涂了......(好吧,好吧......很困惑)
- 我分别致电(GetProcAddress的)每个公共成员函数,只有当我要使用它们?
- 我创建模仿DLL中类的伪类。 然后在类定义内,我打电话从DLL同等功能? (我是决策意识吗?)fnieto,这是你展示我在你的岗位的到底是什么?
- 是否有可能从DLL实例全班?
我试图用我的第一篇描述的连接功能。 从DLL了Depends.exe输出,
- 的std ::地图// KeyValueMap具有以下成员函数: 德尔,空,获取,has_1key,设置
- 的std ::向量//字符串数组有以下成员函数: 添加,能力,清晰,获取,为IsEmpty,储备,设置,大小
这是在我的编译器从图和载体的成员函数不同(2005 VS)...
任何想法? 或者我在这里得到了错误的图片...