是否可以编写一个C .dll库来导出在命名空间和类中编写的方法
Is it possible to write a C++ .dll library to export methods which is written within namespace and class?
我是新手到C dll
概念,只想知道,是否可以编写一个C .dll库来导出命名空间和类中写入的方法?
我尝试过的...
/*JNLib.h Header File*/
#ifndef __JNLIB_H__
#define __JNLIB_H__
#include <string>
#include <vector>
using namespace std;
namespace JNLib
{
class __declspec(dllexport) JNLibClass
{
public:
void split_string();
};
}
#endif
和内部.cpp文件
/*JNLib.cpp File*/
#include "stdafx.h"
#include "JNLib.h"
namespace JNLib
{
void JNLibClass::split_string()
{
cout<<"Library called"<<std::endl;
}
}
现在,我能够编译该项目并成功获取.dll
文件。在另一个项目中,我能够通过使用LoadLibrary()
方法成功加载库(.dll
)文件,但GetProcAddress
方法每次都会返回null。我编写的代码是
typedef void (CALLBACK *f_funci)();
HINSTANCE dllinstance = LoadLibrary(L"..\myLIB\JNLib.dll");
f_funci funci = (f_funci)GetProcAddress(dllinstance, "split_string");
请让我知道我做错了什么。
库中没有称为 split_string
的符号 - 名称已被弄糊。
您可以使用DLL上的dumpbin
工具来查看导出了哪些符号。另外,您可以将要导出的命名空间/类并转移到extern "C"
块(该块)中(停止名称Mangling)。
可以从dll中导出其名称空间中的方法。
首先,使用命名空间定义方法,如@OMGTechy上面写的那样 - 添加extern "C"
装饰:
namespace MyNameSpace{
extern "C" void foo();
}
第二,编辑您的项目def
文件以指定您的命名空间映射:
LIBRARY MyDllName
EXPORTS
MyNameSpace::foo=foo
现在,加载方法指定您的命名空间:
typedef void(*PFN_MYFUNC)();
HINSTANCE hLib = ::LoadLibrary("MyDllName");
PFN_MYFUNC pfn = (PFN_MYFUNC)::GetProcAddress( hLib, "MyNameSpace::foo");
相关文章:
- 如何通过命名空间调用非静态方法
- 转发声明在命名空间中不起作用的替代方法
- 使用 GMock 的具有命名空间的模拟方法
- 在方法定义中显式指定命名空间
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- C++详细介绍命名空间 vs 匿名 vs 私有方法到类 vs. pimpl vs. 朋友类
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- 为在与类方法中的类相同的命名空间中定义的结构调用重载运算符
- 有没有一种方法可以创建具有广义属性的命名空间
- 当类方法不进行时,为什么从标头文件中的独立方法需要为命名空间资格
- 是否可以编写一个C .dll库来导出在命名空间和类中编写的方法
- 在不膨胀命名空间的情况下在C++中声明枚举的好方法
- Visual Studio c++如何找到给定类/方法的包含命名空间
- 在单步执行 std::function 调用时,如何跳过 std 命名空间中的方法调用?(使用 GDB
- 如何将类的静态方法引入命名空间
- 内联类方法,用于调用其他文件的 anon 命名空间中的函数
- 来自命名空间的方法链接
- 使用命名空间标准与其他替代方法
- 为命名空间中的类专用化方法模板