从dll到c#的封送c ++ strncpy函数

时间:2017-09-15 14:47:57

标签: c# string dll char

下面是一个玩具示例,可以更好地理解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);
}

1 个答案:

答案 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