【问题标题】:Error LNK2028: Thrown when instantiating an native C++ class within C++/CLI错误 LNK2028:在 C++/CLI 中实例化本机 C++ 类时抛出
【发布时间】:2013-06-10 08:57:42
【问题描述】:

目前我正在开发一个解决方案,其中包含一个 C++/CLI 项目(它是一个原生 C++ dll 的包装器)和一个 C# WPF 项目(它使用 C++/CLI 包装器的功能)。

我遇到的问题是,当一个指向本地类的指针被实例化(在包装器内)时,会发生链接器错误。

类:

public ref class MCBiosUpdate
{
public:
    MCBiosUpdate(void);
    MCBiosUpdate(MCBiosUpdate^);
    MCBiosUpdate(CBIOSUpdate&);
    ~MCBiosUpdate(void);
    !MCBiosUpdate(void);

private:
    CBIOSUpdate *pBiosUpdate;      //Native C++ Class
};

导致错误的代码:

MCBiosUpdate::MCBiosUpdate(void) : pBiosUpdate(new CBIOSUpdate)   //error LNK2028
{
}

输出:

1>MCBiosUpdate.obj:错误 LNK2028:未解析的令牌 (0A00000E) “公共:__thiscall CBIOSUpdate::~CBIOSUpdate(void)” (??1CBIOSUpdate@@$$FQAE@XZ)

  1. 如何解决链接器错误以使程序按预期运行?
  2. 导致此链接器错误的原因是什么?
  3. 如果对代码有任何改进或有任何建议可以帮助我解决问题;欢迎发表评论。

【问题讨论】:

  • 该错误不是由您引用的语句引起的。但除此之外,它符合代码。链接器只是说它找不到 CBIOSUpdate 类的析构函数的实现。简单的错误,声明一个但忘记定义它。或链接它。
  • 是的,链接器找不到析构函数的实现,因为我没有在 DLL 中导出它。

标签: c# c++ c++-cli


【解决方案1】:

What causes this linker error?

原因可能是pBiosUpdate 接口未从 DLL 导出以对 DLL 的客户端可见,在您的情况下是 C# 代码。

How can I resolve the linker error so that the program runs as intended?

  1. 使用dllexport 提到here

(或)

  1. 使用模块定义文件 (.def file) 导出 DLL 的函数,如提到的 here

【讨论】:

  • 发现...析构函数未在 DLL 中导出。
猜你喜欢
  • 2012-05-23
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2013-06-19
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多