我已经创建了一个.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类型重新编码所有行,或者我如何解决这个问题呢?
答案 0 :(得分:1)
使用命名空间,以便不将这些标识符添加到全局命名空间
namespace Mumble {
#include Component_TLB.h
}