Оборачивание C ++ DLL управляемым классом - PullRequest
0 голосов
/ 19 октября 2010

Я пытаюсь обернуть неуправляемую DLL C ++ управляемой C ++, и у меня продолжают появляться ошибки компоновки.

, хотя я включаю мой library.lib в проект и включаю правильный заголовочный файл.

Это управляемый класс:

#pragma once
#include "..\Terminal\Terminal.h"
public ref class ManagedTerminal
{
    private:
Terminal * m_unTerminal;
public:

ManagedTerminal(void)
{
    m_unTerminal = new Terminal();
}
};

и это неуправляемый класс:

#include "..\Core1.h"
#include "..\Core2.h"

 __declspec(dllexport) class Terminal
{
private:
CoreObj m_core;

public:
Terminal();
void Init(char* path, char* filename);    
void Start();
void Stop();
void Run();
Array<Report> GetSnapshot();
~Terminal(void);
};

и ошибки, которые я получаю:

Ошибка 5, ошибка LNK2028: неразрешенный токен (0A0000B3) «public: __thiscall Terminal :: Terminal (void)» (?? 0Terminal @@ $$ FQAE @ XZ), на который ссылается функция «public: __clrcall ManagedTerminal :: ManagedTerminal (void) ) "(?? 0ManagedTerminal @@ $$ FQ $ AAM @ XZ) ManagedTerminal.obj TerminalWrapper

Ошибка 6, ошибка LNK2019: неразрешенный внешний символ «public: __thiscall Terminal :: Terminal (void)» (?? 0Terminal @@ $$ FQAE @ XZ), на который ссылается функция «public: __clrcall ManagedTerminal :: ManagedTerminal (void)» (?? 0ManagedTerminal @@ $$ FQ $ AAM @ XZ) ManagedTerminal.obj TerminalWrapper

Может кто-нибудь сказать мне, что не так? спасибо:)

1 Ответ

1 голос
/ 19 октября 2010

Вы должны соответствовать всем настройкам сборки, в частности соглашениям о вызовах (CDECL и STDCALL), чтобы иметь успешную ссылку.

Начиная с .NET 2.0, вам также пришлосьдинамически ссылаться на c-runtime, поэтому убедитесь, что и DLL, и управляемый проект C ++ делают это.

По сути, перейдите в диалог свойств для обоих проектов и убедитесь, что все, что влияет на вызов, являетсято же самое.

...