0

目前,我工作的公司正在为其所有软件实施新的图形用户界面。新的 GUI 将在 WPF 中实现,这需要我们的许多旧软件与 .NET Framework 互操作。我最近被分配了为用本机 C++ 编写的软件实现 WPF 接口的职责。

我决定在 C++/CLI 中实现一个包装器,它将包装原生 C++ 代码。包装器获得的功能随后将在 C# 中使用。

我遇到的问题是,每当我从 C++/CLI 项目中引用头文件(位于本机 C++ 项目中)时,都会遇到许多错误(见下文)。这是一个问题,因为当项目独立构建时,本机代码编译时没有错误。

2>C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(16): error C2061: syntax error : identifier 'DWORD'
2>C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(17): error C2061: syntax error : identifier 'CAtlString'
2>C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(17): error C2535: 'CFExeption::CFExeption(void)' : member function already defined or declared
2>          C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(16) : see declaration of 'CFExeption::CFExeption'
2>C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(18): error C2146: syntax error : missing ';' before identifier 'GetErrorText'
2>C:\Users\ABGZAMANK\Music\15.02.2013\DeskUpdate\Dev\Source\Libraries\DeskUpdateCore.dll\Sources\FileOperation.h(18): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

ETC...

  1. 本机 C++ 是否与 C++/CLI 完全兼容,或者是否需要对本机 C++ 代码进行更改?
  2. 他们是完成这项任务的更合适的方法吗?
  3. 如果您对错误消息或任何建议有解决方案,请随时发表评论。
4

1 回答 1

1

如果它抱怨DWORD未定义,则很可能您缺少 Windows 标头。#include <windows.h>在包含库的标题之前尝试添加。(或修改 FileOperation.h 以包含 windows.h 本身。)

在回答“本机 C++ 是否与 C++/CLI 完全兼容?”时,答案是“大部分”。如果您在 C++ 中定义了作为 C++/CLI 中的语言关键字的内容,则会遇到问题。例如,int gcnew = 1是完全有效的 C++,但在 C++/CLI 中根本不起作用,因为gcnew它是一个关键字。不过,总的来说,您应该没问题。

从您的问题来看,听起来您正在获取所有 C++ 代码,并将其编译到 C++/CLI 项目中。如果这是一个现有的测试库,另一种选择是将 C++ 代码保留为非托管 DLL,并从 C++/CLI 调用非托管 DLL,而不是将其放在同一个项目中。也就是说,我的偏好是做你正在做的事情,将 C++ 代码编译到托管程序集中。

于 2013-02-20T16:36:37.843 回答