6

我有一个 c# 中的 windows 窗体应用程序,它使用 c++ 中的函数。这是使用 c++ 包装器完成的。但是,该函数需要使用指针,而 c# 不允许将指针与字符串数组一起使用。可以做些什么来克服这个问题?我已经阅读了使用 marshal 的内容,但我不确定这是否适合这种情况,如果适合,它应该如何与我的代码集成。以下是 C# 代码:

 int elements = 10;
string [] sentence = new string[elements];

unsafe
{
    fixed (string* psentence = &sentence[0])
    {
        CWrap.CWrap_Class1 contCp = new CWrap.CWrap_Class1(psentence, elements);
        contCp.getsum();
    }
}

c++函数声明: funct::funct(string* sentence_array, int sentence_arraysize)

c++ 包装器: CWrap::CWrap_Class1::CWrap_Class1(string *sentence_array, int sentence_arraysize) { pcc = new funct(sentence_array, sentence_arraysize); }

4

1 回答 1

1

如果我理解正确,您想以字符串为参数调用 C 函数。
为此,您通常使用 PInvoke(平台调用),它在手下使用编组。

此示例接受一个字符串并返回一个字符串。

[DllImport(KMGIO_IMPORT,CallingConvention=CallingConvention.Cdecl)]     
//DLL_EXPORT ushort CALLCONV cFunction(char* sendString, char* rcvString, ushort rcvLen);
private static extern UInt16 cFunction(string sendString, StringBuilder rcvString, UInt16 rcvLen);

public static string function(string sendString){
    UInt16  bufSize = 5000;
    StringBuilder retBuffer = new StringBuilder(bufSize);
    cFunction(sendString, retBuffer, bufSize);
    return retBuffer.ToString();
}
于 2013-11-14T06:31:19.260 回答