gpt4 book ai didi

c# - 将托管字符串 (C#) 转换为 LPCOLESTR (C++)

转载 作者:太空狗 更新时间:2023-10-29 23:09:49 25 4
gpt4 key购买 nike

我在 C++ 中挥动了一个接收 LPCOLESTR 类型参数的方法。我正在通过 C# 访问此方法,但我无法在 String 和此类型之间进行正确的转换。

假设 C++ 中的方法签名是:

void Something(LPCOLESTR str)

在 C# 中,我尝试调用它(所有通过 DLL 访问该方法的引用问题都已解决):

String test = "Hello world";
Something(test);

但当然没有运气。如果有人能帮助我,我会很高兴。谢谢!


代码片段:

例如,这是我的 C++ 代码部分,在文件 MixedCodeCpp.h(CLR 类库)中定义

#include "windows.h"  
#pragma once
using namespace System;

namespace MixedCodeCpp
{
public ref class MyClass
{
public:
HRESULT Something(LPCOLESTR str)
{
return S_OK;
}
};
}

这是我在 C# 中的代码(我通过 Visual Studio 在 C# 项目中添加了对 C++ 项目的引用):

StringBuilder sb = new StringBuilder();  
sb.Append("Hello world");
MixedCodeCpp.MyClass cls = new MixedCodeCpp.MyClass();
cls.Something(sb);

最佳答案

参数将在 C# 端显示为 Char*。这需要不安全的代码,如下所示:

    unsafe static void CallSomething(MyClass obj, string arg) {
IntPtr mem = Marshal.StringToCoTaskMemUni(arg);
try {
obj.Something((Char*)mem);
}
finally {
Marshal.FreeCoTaskMem(mem);
}
}

将 LPCOLESTR 暴露给其他托管代码非常意义不大。此方法确实应该接受 String^ 并在内部转换为 wchar_t*。

关于c# - 将托管字符串 (C#) 转换为 LPCOLESTR (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508108/

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