2

我正在尝试编写一个混合模式 DLL,我们称之为“客户端”,以用它们的托管等效项替换一些非托管类。在我的个人机器上一切正常,但是当我签入源代码时,我们的构建机器不会构建项目。它无法识别我在另一个名为“Core”的 DLL 中使用的托管类。

我认为这个问题与预编译的头文件有关。原因如下:

为了使用“Core”中的类,我在“Client”项目中添加了对“Core”项目的引用。如果我删除此引用,然后在我的个人计算机上构建项目,它仍然可以工作。但是,CLR PCH 在删除引用后不会重新编译。如果我重新编译 CLR PCH,然后编译项目,它会失败并出现与构建机器上相同的错误:无法识别托管类。

在我看来,您导入的 DLL 中的托管类是在预编译头文件中定义的。我无法验证这一点,但这是我最好的猜测。有没有人对这个问题有任何见解?混合 DLL 中的项目引用是否通过将挂钩放入托管 PCH 来解决?

重现步骤

以下对我来说毫无意义:

  1. 获取客户端构建。
  2. 删除从客户端到核心的引用。编译客户端。客户端仍在构建。这不是预期的。
  3. 重新编译Client PCH,然后编译Client。编译客户端失败:“核心”中的类未定义。这是预期的行为。
  4. 添加对Core的引用,编译。由于同样的原因,编译客户端失败。这不是预期的
  5. 重新编译Client PCH,然后编译Client。客户端编译良好。

我从这个实验中得出的结论是,引用是通过预编译的头文件插入到项目中的,并且它的工作方式有些问题,至少在我们的构建机器上是这样。

4

2 回答 2

0

它不能那样工作,因为你不需要使用预编译的头文件。
PCH 所做的只是让您加快构建速度。
它对引用没有什么特别的作用......

于 2009-07-09T15:55:24.773 回答
0

还有另一种方法可以在 C++/CLI 中添加对托管/混合模式 dll 的引用 - 将 #using Core.dll 添加到客户端。这可能会解决您的构建问题。

于 2009-07-09T19:50:24.453 回答