gpt4 book ai didi

c# - 将 "Treat wchar_t as built-in type"设置为 No 会影响 C# 互操作吗?

转载 作者:行者123 更新时间:2023-11-28 00:59:05 24 4
gpt4 key购买 nike

我有一个使用 C++ DLL 的 C# 应用程序。这一直工作正常,但我现在必须将“将 wchar_t 视为内置类型”从“是 (/Zc:wchar_t)”更改为“否 (/Zc:wchar_t-)”,我的 C# 应用程序变得非常不稳定。 C++ 和 C# 之间的互操作层包括一些字符串作为函数参数和结构,如下所示:

C++:

typedef struct
{
// Used to be: WCHAR wstrName[256];
wchar_t wstrName[256];
} sdevicemodel_t;

C#:

namespace Thingy
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DeviceModel
{
// info
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Name;
}
}

我是否需要更改此声明以匹配 C++ 更改,或者这很好但我的问题出在其他地方?

感谢您的帮助。

最佳答案

简短的回答是:不,它不会以任何方式影响互操作。

此选项表示编译器将 wchar_t C++ 类型视为内置类型,而不是 unsigned shorttypedef。这是(不太)最新版本的 C++ 语言所要求的,但旧版本的 MS C++ 编译器并没有做到这一点。

现在您有两个选择:C++ 标准方式:(The Right Way™) 和向后兼容方式 (The MS Way™)。

但是这种差异(内置类型与 typedef 类型)仅在您进行函数重载、模板特化或类似操作时才显着。 C# Interop 只关心二进制兼容性,并且此选项未改变这一点(wchar_t 在这两种情况下都是无符号 16 位整数)。

关于c# - 将 "Treat wchar_t as built-in type"设置为 No 会影响 C# 互操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9693022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com