在C ++ / CLI中包装getter方法时的链接器错误

时间:2019-04-25 19:17:44

标签: c++-cli

我必须用C ++ / CLI包装一个C ++ dll(无法修改),以便此C ++公开的方法和类可以在C#中使用。我的问题与C#部分无关,但是当我尝试用C ++ / CLI包装C ++代码时出现错误。

这是问题的怪异之处,我能够包装构造函数和其他方法,但是我无法包装吸气剂,因为它将出现链接器错误2028和2019(未解决的标记和外部符号)。代码看起来像这样

Native.h

#pragma once
#ifdef NATIVE_EXPORTS
#define NATIVE_API __declspec(dllexport)
#else
#define NATIVE_API __declspec(dllimport)
#endif

class NATIVE_API SomeClass
{
        //some irrelevant fields


        //what I cannot wrap
    LONG height = 0;
    LONG width = 0;
    WORD count= 0;


public:

    __declspec(property(get = getHeight)) LONG height;
    __declspec(property(get = getWidth)) LONG width;
    __declspec(property(get = getCount)) WORD count;

    LONG getHeight() {
        return height;
    };
    LONG getWidth() {
        return width;
    };
    WORD getCount() {
        return count;
    };

    SomeClass(BYTE *ptr);
    BYTE* SomeMethod1(bool someCondition);
    BYTE* SomeMethod2(DWORD X, DWORD Y, DWORD panel_W, DWORD panel_H);
    ~SomeClass();
};

Wrapper.h

#pragma once
#include "windows.h"
#include "../NativeProject/Native.h"
using namespace System;
namespace Wrapper {
    public ref class ManagedClass
    {
    public:
        //no problem with the first four!!!!
        ManagedClass() (BYTE* ptr); //implemented in cpp
        ~ManagedClass() { delete _foo; };
        IntPtr ManagedMethod1(bool someCondition) { return IntPtr(_foo->SomeMethod1(someCondition)); };
        IntPtr ManagedMethod2(DWORD X, DWORD Y, DWORD panel_W, DWORD panel_H) { return IntPtr(_foo->SomeMethod2(X,Y,panel_W,panel_H)); };
        LONG getHeight() { return _foo->getHeight(); }; //linker error!!!
        LONG getWidth() { return _foo->getWidth(); }; //linker error!!!
        WORD getCount() { return _foo->getCount(); }; //linker error!!!
    protected:

        !ManagedClass() { delete _foo; };
    private:
        SomeClass *_foo;
    };
}

由于我真的是C ++ / CLI的新手,所以我所做的某些事情可能绝对是愚蠢的,请指出这些。但是我只是无法弄清楚为什么可以毫无问题地公开常规方法,但是我不明白为什么吸气剂会出现链接器错误。为什么出现链接器错误,我该如何解决?

0 个答案:

没有答案