gpt4 book ai didi

c++ - 用托管类包装 C++ DLL

转载 作者:行者123 更新时间:2023-11-28 08:26:18 29 4
gpt4 key购买 nike

我试图用托管 C++ 包装一个非托管 C++ DLL,但我不断收到链接错误。

即使我在项目中包含我的 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 error LNK2028: unresolved token (0A0000B3) "public: __thiscall Terminal::Terminal(void)"(??0Terminal@@$$FQAE@XZ) referenced in function "public: __clrcall ManagedTerminal::ManagedTerminal(void) )"(??0ManagedTerminal@@$$FQ$AAM@XZ) ManagedTerminal.obj TerminalWrapper

错误 6 error LNK2019: 未解析的外部符号“public: __thiscall Terminal::Terminal(void)” (??0Terminal@@$$FQAE@XZ) 在函数“public: __clrcall ManagedTerminal::ManagedTerminal(void)”中引用(??0ManagedTerminal@@$$FQ$AAM@XZ) ManagedTerminal.obj TerminalWrapper

谁能告诉我这是怎么回事?谢谢:)

最佳答案

您必须匹配所有build设置——特别是调用约定(CDECL 与 STDCALL)——才能成功链接。

自 .NET 2.0 以来,您还必须动态链接到 c 运行时,因此请确保 .dll 和托管 C++ 项目都这样做。

基本上,进入两个项目的属性对话框并确保影响调用的内容相同。

关于c++ - 用托管类包装 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963130/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com