在C ++ Builder 4中使用.NET COM DLL - 字符串和System :: Strings之间的歧义

时间:2011-02-01 19:39:49

标签: .net dll c++builder ambiguity mscorlib

我已经创建了一个.NET COM DLL,我需要在C ++ Builder 4项目中使用它。我可以使用导入类型库功能导入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;

我在项目中使用字符串类型A LOT,如何“强制”编译器使用System :: String而不必使用String类型重新编码所有行,或者我如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

使用命名空间,以便不将这些标识符添加到全局命名空间

namespace Mumble {
   #include Component_TLB.h
}