1

我创建了一个需要在我的 C++ Builder 4 项目中使用的 .NET COM DLL。我可以使用导入类型库功能导入 DLL(事实上,我在构建 DLL 时导入了 DLL 附带的 TLB 文件)。这会在我的 C++ Builder \ Imports 文件夹中创建一个 Component_TLB.h。然后我在我的项目中#include 这个 _TLB 文件,我可以执行以下操作:

TCOM_Create theDLL;
theDLL = CoCreate::Create();
theDLL->FunctionX(paramy);

这按预期工作。


从“导入类型库”功能创建的 Component_TLB.h 包括(除其他外) mscorlib :

#include "mscorlib_TLB.h"

...这似乎是我的 DLL 的可靠内容,这是我在评论中发现的内容:

// DepndLst: 
//   (1) v2.0 mscorlib, (C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb)  **<---**
//   (2) v2.0 stdole, (C:\Windows\SysWOW64\stdole2.tlb)
//   (3) v4.0 StdVCL, (C:\Windows\SysWow64\STDVCL40.DLL)

问题是因为这个 mscorlib 包含在我的项目中,所以我不能像以前那样使用“String”类型。以下行:

String abc;

..给我以下错误:

[C++ Error] Unit1.cpp(23): E2015 Ambiguity between 'String' and 'System::String'.

看起来这个 mscorlib 有自己的 String 类型或其他东西......我发现:

extern const GUID IID__String;

extern const GUID CLSID_String;

我在我的项目中使用了很多 String 类型,我如何“强制”编译器使用 System::String 而不必重新编码 String 类型的所有行,或者我该如何解决这个问题?

4

1 回答 1

2

使用命名空间,这样这些标识符就不会被添加到全局命名空间中

namespace Mumble {
   #include Component_TLB.h
}
于 2011-02-01T19:45:31.753 回答