如何声明常量字符串以在非托管 C++ 中使用? dll 和 C# 应用程序中?
目前,我在启动时通过回调将 const 字符串值从 C++ 传递到 C# 中,但我想知道是否有一种方法可以在 C++ 头文件中定义它们,然后我也可以在 C# 中引用它们。
我已经用枚举做到了这一点,因为它们很简单。 我在我的 C++ 库项目(通过顶部带有编译指示的 .h 文件)和我的 C# 应用程序(作为链接)中都包含一个文件:
#if _NET
public
#endif
enum ETestData
{
First,
Second
};
我知道这听起来很混乱,但它有效:)
但是...我怎样才能对字符串常量做同样的事情 - 我最初认为平台之间的语法差异太大,但也许有办法?
使用涉及 #if _NET、#defines 等的巧妙语法?
使用资源文件?
使用 C++/CLI 库?
有什么想法吗?
Curently I'm passing my const string values up from my C++ into my C# at startup via a callback, but I'm wondering if there's a way of defining them in a C++ header file that I can then also refer to in C#.
I already do this with enums as they are easy.
I include a file in both my C++ library project (via a .h file with a pragma once at the top), and my C# application (as a link):
#if _NET
public
#endif
enum ETestData
{
First,
Second
};
I know it sounds messy, but it works :)
But...how can I do the same with string constants - I'm initially thinking the syntax is too different between the platforms, but maybe there's a way?
Using clever syntax involving #if _NET, #defines etc?
Using resource files?
Using a C++/CLI library?
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C# 字符串常量采用以下形式:
我认为 C++ 中的首选方式是:
C# 中的
string
只是 .NET 类型String
的别名。一种方法是创建一个 C++ #define:你的通用代码将如下所示:
我必须承认我还没有尝试过,但看起来它会起作用。
A C# string constant would take the form:
I think the preferred way in C++ is:
string
in C# is just an alias for the .NET type,String
. One way to do this would be make a C++ #define:And your common code would look like this:
I have to admit that I haven't tried it, but it looks like it'll work.
你可以说我很有趣,但我认为最好的方法是使用 C++/CLI 和 C++。
这使您可以将相同的字符串 #include 到两个不同的上下文中,并让编译器发挥作用。
这将为您提供字符串数组,
否则您可以直接使用 C 预处理器:
Call me funny, but I think the best way to do this is using C++/CLI and C++.
This lets you #include the same strings into two different contexts and let the compiler do the magic.
This will give you arrays of strings
otherwise you can use the C preprocessor straight out: