因此,我成功地使用 /clr 标志将我正在开发的项目编译为 .lib。我现在正在努力为它创建一个 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)
我已将相关条目添加到包含目录,以及相关条目到 lib 目录。
代码如下所示:
标准数据文件
#pragma once
#include "cMain.h"
渲染器.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.
};
}
渲染器.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
我的直觉告诉我,这与在我试图设置为 lib 的项目中使用 Windows API 有关,但我缺乏将事物链接在一起的经验,所以老实说我不知道。
我想将整个事情转换为完全对 CLR 友好,我不想不遗余力。谢谢您的帮助