在 C++ 中使用 .NET COM DLL Builder 4 - Strings 和 System::Strings 之间的歧义
我创建了一个 .NET COM DLL,需要在我的 C++ Builder 4 项目中使用。我可以使用导入类型库功能导入 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 类型重新编码所有行,或者我该如何解决这个问题?
I've created a .NET COM DLL that I need to use in my C++ Builder 4 project. I'm able to import the DLL using the Import Type Library functionality (in fact I import the TLB file that comes with the DLL when I build it). This creates a Component_TLB.h in my C++ Builder \ Imports folder. I then #include this _TLB file in my project and I'm able to do the following:
TCOM_Create theDLL;
theDLL = CoCreate::Create();
theDLL->FunctionX(paramy);
This works as intended.
The Component_TLB.h created from the "Import Type Library" functionality includes (amongst other things) mscorlib :
#include "mscorlib_TLB.h"
...which seems to be a dependable of my DLL, here's what I've found in the comments:
// 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)
The problem is that because this mscorlib is included in my project I can't use the "String" type like I used to be. The following line:
String abc;
..gives me the following error:
[C++ Error] Unit1.cpp(23): E2015 Ambiguity between 'String' and 'System::String'.
It looks like this mscorlib has its own String type or something... I've found:
extern const GUID IID__String;
and
extern const GUID CLSID_String;
I use the String type A LOT in my project, how can I "force" the compiler to use System::String without having to recode everything line with a String type or how could I work around this ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用命名空间,这样这些标识符就不会添加到全局命名空间中
Use a namespace so these identifiers don't get added to the global namespace