我创建了一个需要在我的 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 类型的所有行,或者我该如何解决这个问题?