2009-07-09 68 views
1

我正在尝试编写混合模式DLL,我们称之为'客户端',用它们的托管等价物替换一些非托管类。在我的个人计算机上一切正常,但是当我检查源代码时,我们的构建机器不会构建项目。它无法识别我从另一个叫做'Core'的DLL中使用的托管类。C++/CLI预编译头文件:它们是如何工作的?

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

要使用'Core'中的类,我在'Client'项目中添加了对'Core'项目的引用。如果我删除这个引用,然后在我的个人机器上构建项目,它仍然有效。虽然,CLR PCH在删除引用后不会重新编译。如果我重新编译CLR PCH,然后编译该项目,它将失败,并出现与生成计算机上相同的错误:托管类无法识别。

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

步骤来重现

下是没有意义的我:

  1. 获取客户打造。
  2. 将客户端的引用移除到核心。编译客户端。客户端仍然构建。这不是预期的。
  3. 重新编译客户端PCH,然后编译客户端。编译客户端失败:'Core'中的类未定义。这是预期的行为。
  4. 添加引用到核心,编译。由于相同的原因,编译客户端失败。这不是预期的
  5. 重新编译客户端PCH,然后编译客户端。客户端编译正常。

我从这个实验得出的结论是,通过预编译头文件将引用插入到项目中,并且至少在我们的构建机器上工作的方式破坏了某些东西。

回答

0

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

0

它不能这样工作,因为你不需要使用预编译头。
PCH所能做的就是让你加快构建速度。
它没有做任何特别的参考.....

+0

每一次,一段时间,编译时,我的错误: 使用#using失败的“...... Core.dll” 当我双击htis错误指向我到PCH的CPP文件。这就是为什么我认为它将参考引入PCH。 – 2009-07-09 16:23:48