我是与非托管库交互的新手.我有一个非托管的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"吗?
谢谢