C#C /CLR处理REF参数和字符串指针
C# C++/CLR handling ref parameters and string pointers
我正在将C /CLR DLL在我的C#应用中消耗,并且由于本机代码带有"&但是C#提示我需要删除" REF"(或" OUT"(关键字。此外,这些论点被转化为我的C#中的" ",例如无法接受该类型,因此我从"字符串"到"字符串"的转换错误。
我正在使用此演示的Pavel Yosifovich示例代码:
托管的C 文件:Managedperson.cpp
String^ ManagedPerson::SayHello(String^ &greet) {
marshal_context ctx;
return gcnew String(m_pNative->SayHello(ctx.marshal_as<LPCTSTR>(greet)));
}
我的C#应用:main.cs
static void Main(string[] args)
{
var person = new ManagedPerson("Bart", 10);
Console.WriteLine(person.SayHello("Hello "));
}
然后我在我的C#编译中遇到此错误(person.sayhello原因(:
Argument 1: cannot convert from 'string' to 'string*'
如果我删除"&amp;",则可以使用此功能。从C 代码(String^&amp; ettry(中,但我必须通过参考发送。
我已经成功地使用了INTPTR(尽管作为不安全的代码(使用了INT32之类的类型,但是问题在于字符串和其他复杂类型。
任何线索都会有所帮助。thx。
好的,这是通过这种方式解决的:
当我的c 代码中的字符串ref参数就像foo(字符串^ mystr(时,我的CLR期望它为字符串*。
我必须称其为字符串^%才能在常规foo(ref string mystr(
中称为但是,托管类不会将值传递给ref参数,因此我必须使用temp params,即:
Void Foo(String^ %MyStr)
{
marshal_context ctx;
std::wstring temp_MyStr = ctx.marshal_as<std::wstring>(MyStr);
myCppClass->DoSomthing(temp_MyStr);
MyStr = temp_MyStr.c_str();
}
这也指其他类型,例如int%,短%等。
至于问题中的例子,解决方案只是替换了"&amp;"用"%"。
String^ ManagedPerson::SayHello(String^ %greet) {
希望这会有所帮助...
相关文章:
- strcpy 在类中无法使用字符串指针
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 使用conststd::字符串指针作为函数参数
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- OOP 和字符串指针的奇怪行为
- 在 C++ 中通过字符串指针复制字符串变量中的字符串
- 删除字符串指针在struct中的内存
- 字符串指针的排序向量
- C#C /CLR处理REF参数和字符串指针
- 问题在字符串指针中存储单词
- 如何在C++中从字符串指针中获取字符
- 如何使用字符串指针访问映射的键
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 如何获取字符串指针的值?
- C++ 字符串* 指针未在控制台中正确打印
- Visual Studio C++ 空字符串指针
- 管理C#中返回的字符串指针
- 指向C++中的字符串指针数组的指针
- 如何将结果集设置为字符串指针
- 如何初始化字符串指针