小编Don*_*nie的帖子

如何通过引用发送字符串来修改该字符串的非托管C库?

我是与非托管库交互的新手.我有一个非托管的C函数,它通过函数内的引用修改字符串.我在从C#传递字符串并通过C函数修改它时遇到了麻烦.

这是C函数:

__declspec(dllexport) void __stdcall Test(char* name)
{
    *name = "Bar";
}
Run Code Online (Sandbox Code Playgroud)

这是C#DLL导入代码:

[DllImport(@"C:/blah/mylibrary.dll")]
public extern static string Test(string name);
Run Code Online (Sandbox Code Playgroud)

这是我用来调用函数的代码:

string s = "foo";
Test(s);
//I want s to be "Bar" after the above line
Run Code Online (Sandbox Code Playgroud)

我尝试在字符串参数上使用"ref"和"out",并尝试将编组作为LPStr.根据我的尝试,我得到一个错误

"作为String传入的指针不能位于进程地址空间的底部64K."

要么

"试图读取或写入受保护的内存.这通常表明其他内存已损坏."

我确定我只是用我的指针做一些愚蠢的事情.有人可以帮我确定合适的C#代码,使"s"等于"bar"吗?

谢谢

c c# unmanaged managed

10
推荐指数
1
解决办法
6788
查看次数

标签 统计

c ×1

c# ×1

managed ×1

unmanaged ×1