我正在使用代码:: Blocks进行oop c ++。
这是我在oop中的第一步,因为我用C语言编写微处理器。
我在连接dll时遇到问题。
我的dll项目主要是:
#include "main.h"
#include "xclass.h"
// a sample exported function
void DLL_EXPORT SomeFunction(const LPCSTR sometext)
{
MessageBoxA(0, sometext, "DLL Message", MB_OK | MB_ICONINFORMATION);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
这是标题:
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
#include "xclass.h"
/* To use this exported function of dll, include this header
* in your project.
*/
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
void DLL_EXPORT SomeFunction(const LPCSTR sometext);
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__
你可以看到的基本内容。
问题在于我将类xclass包含在主:
中#include "xclass.h"
xclass::xclass()
{
//ctor
}
xclass::~xclass()
{
//dtor
}
和标题
#ifndef XCLASS_H
#define XCLASS_H
class xclass
{
public:
xclass();
virtual ~xclass();
unsigned int GetCounter() { return m_Counter; }
void SetCounter(unsigned int val) { m_Counter = val; }
protected:
private:
unsigned int m_Counter;
};
#endif // XCLASS_H
我能够在其他项目中链接和使用dll。 A甚至可以使用DLL SomeFunction("teste x");
中的函数,但我无法访问我们的类:
#include <iostream>
#include "main.h"
//#include "../cvWrapper/main.h"
using namespace std;
int main()
{
xclass ClassInDll;// not working
SomeFunction("teste x"); //using the function in dll
printf("%d\n", 1);
return 0;
}
构建错误是:
|| === testDLL,Debug === | obj \ Debug \ main.o ||在函数
main':| C:\Users\SoftVision\Desktop\PrinterCode\DLL_test\testDLL\main.cpp|9|undefined reference to
xclass :: xclass()'|中 C:\ Users \用户SoftVision \桌面\ PrinterCode \ DLL_test \ testDLL \ main.cpp中| 14 |未定义 引用xclass::~xclass()'| C:\Users\SoftVision\Desktop\PrinterCode\DLL_test\testDLL\main.cpp|14|undefined reference to
xclass :: ~xclass()'| || ===构建完成:3个错误,0 警告=== |
感谢帮助...
答案 0 :(得分:1)
实际上你应该导出这个类:
class DLL_EXPORT xclass
{
public:
xclass();
virtual ~xclass();
unsigned int GetCounter() { return m_Counter; }
void SetCounter(unsigned int val) { m_Counter = val; }
protected:
private:
unsigned int m_Counter;
};
导出不是纯虚拟类的类时要小心,因为您可能遇到内存对齐方面的一些问题。这是因为不同编译器中的RTL版本不同。而是导出您的类的纯虚拟接口。
class DLL_EXPORT IXClass
{
public:
IXClass();
virtual ~IXClass();
virtual unsigned int GetCounter()=0;
virtual void SetCounter(unsigned int val) =0;
};
还要避免使用宏... 祝你好运:)。
答案 1 :(得分:0)
您也需要导出课程:
class DLL_EXPORT xclass {
//...
您可能需要稍微重新排列标题 - 例如将#define
放在DLL_EXPORT
的某处,可以包含在'main.h'和'xclass.h'中。
http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL