我是C++的新手dll
的概念,只是想知道,是否有可能編寫一個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
方法每次都返回空值。我寫的代碼是
typedef void (CALLBACK *f_funci)();
HINSTANCE dllinstance = LoadLibrary(L"..\\myLIB\\JNLib.dll");
f_funci funci = (f_funci)GetProcAddress(dllinstance, "split_string");
請讓我知道我做錯了什麼。
查找符號損壞。您也可以使用Windows上的dumpbin工具(隨Visual Studio提供)來檢查實際導出的符號名稱。 – OMGtechy
除了[name-mangling](https://en.wikipedia.org/wiki/Name_mangling)問題,您還有另一個加載該函數的問題。問題是你試圖加載一個非靜態成員函數,因爲它是一個非成員函數。非靜態成員函數需要調用* object *。 –
爲什麼不包含頭文件(使用'dllimport'而不是'dllexport')並鏈接到dll? –