下面是一个玩具示例,可以更好地理解c#和c ++ / dll之间字符串类型的编组。
什么是编组" MyStrCopy"的最好方法。下面的函数进入c#? (最好不要使用unsafe关键字,并将类型编组进c#作为字符串类型。)
文件:MyStrCopy.cs
self
文件:MyStrCopy.h:
self
文件:MyStrCopy.cpp
using System.Runtime.InteropServices;
namespace MySpace {
class MyDll {
[DllImport (@"MyStrCopy")]
public static extern void MyStrCopy(
string dest????, string source????, int dest_length????);
}
}
我编译了上面的文件" MyStrCopy.cpp"进入一个名为:MyStrCopy.dll的dll
我也有点好奇,如果你在不使用不安全和编组类型的字符串的情况下返回char *会是什么样子。例如,如果dll导出的函数看起来像这样:
extern "C" {
void __declspec(dllexport) MyStrCopy(
char* dest, const char* source, int dest_length);
}
答案 0 :(得分:1)
using System.Text;
using System.Runtime.InteropServices;
namespace MySpace
{
class MyDll {
[DllImport("MyStrCopy.dll", CharSet = CharSet.Ansi)]
public static extern void MyStrCopy(
StringBuilder dst_str,
string src_str,
int dst_len);
static void ExampleUsage() {
int dest_len = 100;
StringBuilder dest_str = new StringBuilder(dest_len);
string source = "this is a string";
MyStrCopy(dest_str, source, dest_len);
return;
}
} //class
} //namespace