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

发布于 2024-10-15 19:34:41 字数 1229 浏览 2 评论 0原文

我创建了一个 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稚气少女 2024-10-22 19:34:41

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

namespace Mumble {
   #include Component_TLB.h
}

Use a namespace so these identifiers don't get added to the global namespace

namespace Mumble {
   #include Component_TLB.h
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文