Попытка преобразовать проект C ++ в статическую библиотеку, совместимую с CLR

Итак, мне удалось скомпилировать проект, который я разрабатывал, в .lib, успешно используя флаг / clr. Сейчас я пытаюсь создать оболочку библиотеки классов CLR, чтобы я мог использовать ее с .NET.

Я получаю следующие ошибки при попытке скомпилировать библиотеку классов CLR:

Renderer.obj : error LNK2028: unresolved token (0A000017) "public: __thiscall cMain::cMain(void)" (??0cMain@@$$FQAE@XZ) referenced in function "private: void __clrcall Renderer::GraphicsBox::NewGraphicsBox(int,int,int,int)" (?NewGraphicsBox@GraphicsBox@Renderer@@$$FA$AAMXHHHH@Z)

Renderer.obj : error LNK2019: unresolved external symbol "public: __thiscall cMain::cMain(void)" (??0cMain@@$$FQAE@XZ) referenced in function "private: void __clrcall Renderer::GraphicsBox::NewGraphicsBox(int,int,int,int)" (?NewGraphicsBox@GraphicsBox@Renderer@@$$FA$AAMXHHHH@Z)

Я добавил соответствующие записи в каталоги include, а также соответствующие записи в каталогах lib.

Код выглядит так:

stdafx.h

#pragma once

#include "cMain.h"

Renderer.h

#pragma once

#include "Stdafx.h"using namespace System;

namespace Renderer {

public ref class GraphicsBox
{
GraphicsBox();
~GraphicsBox();

void NewGraphicsBox(System::Int32 scrw, System::Int32 scrh, System::Int32 posx, System::Int32 posy);
// TODO: Add your methods for this class here.
};
}

Renderer.cpp

#include "stdafx.h"
#include "Renderer.h"
pragma comment(lib "DX11test.lib")

using namespace Renderer;

GraphicsBox::GraphicsBox()
{

}

GraphicsBox::~GraphicsBox()
{

}

void GraphicsBox::NewGraphicsBox(System::Int32 scrw, System::Int32 scrh, System::Int32 posx, System::Int32 posy)
{
cMain *base;

bool result;

base = new cMain;
if (!base)
{
throw runtime_error("Failed at base = cMain");
}
}

И класс я пытаюсь ссылаться:

cMain.h

#ifndef _CMAIN_H_
#define _CMAIN_H_

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <vector>
#include <map>
#include <string>

#include "InputHandler.h"#include "cGraphics.h"#include "cVehicleObject.h"#include "cVehicleModel.h"#include "cTerrainModel.h"#include "cLight.h"
using namespace std;

public class cMain
{
public:
cMain();
cMain(const cMain& other);
~cMain();

bool Initialize(int scrWidth, int scrHeight);
void Shutdown();
void Run();

LRESULT CALLBACK MessageHandler(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam);
private:
bool Frame();
void InitializeWindows(int& scrw, int& scrh);
void CreateNewWindow(int& scrw, int& scrh, int posx, int posy);
void ShutdownWindows();

void ErrorDump(vector<string> errors, string filename);
void ErrorDump(string error, string filename);

bool SetUpLights();
bool SetUpObjects();

LPCWSTR m_applicationName;
HINSTANCE m_hinstance;
HWND m_hwnd;

InputHandler* m_input;
cGraphics* m_graphics;

cObject::GameObjects m_gameObjects;

vector<cLight> m_lights;
};

static LRESULT CALLBACK WndProc(HWND hwnd, UINT umessage, WPARAM wparam, LPARAM lparam);
static cMain* ApplicationHandle = 0;

#endif

Мои инстинкты говорят мне, что это как-то связано с использованием Windows API в проекте, который я пытаюсь настроить как lib, но я неопытен в том, чтобы связывать вещи вместе, поэтому я, честно говоря, понятия не имею.

Я хочу, чтобы все это было полностью дружественным к CLR, я не хочу оставлять камень на камне. Спасибо за помощь

1

Решение

Ошибки компоновщика не имеют никакого отношения к пути включения вашей программы, это связано с реализацией функции. В вашем опубликованном примере я не вижу cMain.cppтак что, может быть, вы забыли реализовать это или просто забыли реализовать cMain::cMain()

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]