DLL中的C ++构造函数不实例化问题

时间:2011-11-08 04:29:22

标签: visual-c++ dll constructor dllexport

我已经在VS 2010中编译并构建了一个DLL项目。我在同一个解决方案中添加了一个姐妹项目,它实际上将链接到上面的DLL并需要加载它的构造函数和功能。但是,一旦我尝试实例化对象,它就会提供access violation

主要是,我这样做..

#include <iostream>
#include "MCaromDLL.h"

using namespace std;
using namespace MagneticCarom;

int main() {
    . . .
    MagneticCaromWrapper wrapper;
        . . .
}

我的“MCaromDLL.h”看起来像这样:

// MCaromDLL.h

#define NULL 0
#define MAX_COLS 201        //Fixed based on the FEMM values
#define MAX_ROWS MAX_COLS   //Fixed based on the FEMM values

#ifdef DLL_PROJECT 
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif

#ifndef __MCAROMDLL_H__
#define __MCAROMDLL_H__

namespace MagneticCarom
{
    . . . . . . .
    class DLLSPEC MagneticCaromWrapper
    {
        private:
                       //All private members here...            

        public:
            MagneticCaromWrapper();

            MagneticCaromWrapper(int number);

            virtual ~MagneticCaromWrapper();

                        //remaining functions
    }
}
#endif

请注意,我正在尝试导出整个类(虽然我现在也尝试导出单个func,但是徒劳无功)。整个代码可根据要求提供。

1 个答案:

答案 0 :(得分:2)

通过dll接口处理内存或结构总是一个问题。 可能出错的事情:

  • 不同的运行时
  • 不同的allignment
  • 重载新...

确保它有效:   - 使用纯虚拟界面   - 使用工厂方法   - 使用删除/释放方法

IMagneticCaromWrapper* DLLSPEC FactoryMagneticCaromWrapper();

class IMagneticCaromWrapper
{
public:
    virtual void Release();
}

实施。

IMagneticCaromWrapper* DLLSPEC FactoryMagneticCaromWrapper()
{
    return new MagneticCarom();
}

IMagneticCaromWrapper::Release()
{
    delete this;
}

最好不要跨越dll边界抛出异常。