Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串引用从C#传递到C++;功能 我有一个C++库,我在其中写了一些函数。 此函数必须返回整数和字符串。(2个输出)我将从我的C#程序调用此函数。 这是我用C++编写的代码: extern "C"{ __declspec(dllexport) UINT Read(OUT char* Temp ) { ..... } }_C#_C++_Mfc - Fatal编程技术网

将字符串引用从C#传递到C++;功能 我有一个C++库,我在其中写了一些函数。 此函数必须返回整数和字符串。(2个输出)我将从我的C#程序调用此函数。 这是我用C++编写的代码: extern "C"{ __declspec(dllexport) UINT Read(OUT char* Temp ) { ..... } }

将字符串引用从C#传递到C++;功能 我有一个C++库,我在其中写了一些函数。 此函数必须返回整数和字符串。(2个输出)我将从我的C#程序调用此函数。 这是我用C++编写的代码: extern "C"{ __declspec(dllexport) UINT Read(OUT char* Temp ) { ..... } },c#,c++,mfc,C#,C++,Mfc,这是我在importdell课程中的C代码: [DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl)] public static extern uint Read(char[] temp); 在我的表格中,我有: char[] str = new char[256]; ImportDLL.Read(str); 它正确返回Int,但字符串结果(str数组)完全为零(\0) 我的代码有什么问题?

这是我在
importdell
课程中的C代码:

[DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint Read(char[] temp);  
在我的表格中,我有:

char[] str = new char[256];  
ImportDLL.Read(str);  
它正确返回Int,但字符串结果(str数组)完全为零(\0)
我的代码有什么问题?

谢谢。

因为返回值是OUT,所以我假设它是用C++方法创建的。 在这种情况下,您可能需要将StringBuilder传递给它:

[DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Unicode)]
public static extern uint Read(StringBuilder temp);  

注意,还应该指定字符集,这取决于C++代码使用的字符编码——ANSI或Unicode。 要调用它,请创建一个足够大的新StringBuilder并将其传递给

Read()
,然后在
Read()
返回后使用StringBuilder.ToString()检索字符串

如果C++函数希望有一定大小的字符串缓冲区,则需要创建String BuuuBuffER至少为这个大小,例如:

const int BUFFER_SIZE = 128;
var sb = new StringBuilder(BUFFER_SIZE);
Read(sb);
var result = sb.ToString();

注:很难说这是不是正确的解决方案,而不知道C++函数的细节。可能是您需要传递一个字符串。

因为返回值是OUT,所以我假设它是用C++方法创建的。 在这种情况下,您可能需要将StringBuilder传递给它:

[DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Unicode)]
public static extern uint Read(StringBuilder temp);  

注意,还应该指定字符集,这取决于C++代码使用的字符编码——ANSI或Unicode。 要调用它,请创建一个足够大的新StringBuilder并将其传递给

Read()
,然后在
Read()
返回后使用StringBuilder.ToString()检索字符串

如果C++函数希望有一定大小的字符串缓冲区,则需要创建String BuuuBuffER至少为这个大小,例如:

const int BUFFER_SIZE = 128;
var sb = new StringBuilder(BUFFER_SIZE);
Read(sb);
var result = sb.ToString();

注:很难说这是不是正确的解决方案,而不知道C++函数的细节。可能是您需要传递一个字符串。

因为返回值是OUT,所以我假设它是用C++方法创建的。 在这种情况下,您可能需要将StringBuilder传递给它:

[DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Unicode)]
public static extern uint Read(StringBuilder temp);  

注意,还应该指定字符集,这取决于C++代码使用的字符编码——ANSI或Unicode。 要调用它,请创建一个足够大的新StringBuilder并将其传递给

Read()
,然后在
Read()
返回后使用StringBuilder.ToString()检索字符串

如果C++函数希望有一定大小的字符串缓冲区,则需要创建String BuuuBuffER至少为这个大小,例如:

const int BUFFER_SIZE = 128;
var sb = new StringBuilder(BUFFER_SIZE);
Read(sb);
var result = sb.ToString();

注:很难说这是不是正确的解决方案,而不知道C++函数的细节。可能是您需要传递一个字符串。

因为返回值是OUT,所以我假设它是用C++方法创建的。 在这种情况下,您可能需要将StringBuilder传递给它:

[DllImport("Library.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Unicode)]
public static extern uint Read(StringBuilder temp);  

注意,还应该指定字符集,这取决于C++代码使用的字符编码——ANSI或Unicode。 要调用它,请创建一个足够大的新StringBuilder并将其传递给

Read()
,然后在
Read()
返回后使用StringBuilder.ToString()检索字符串

如果C++函数希望有一定大小的字符串缓冲区,则需要创建String BuuuBuffER至少为这个大小,例如:

const int BUFFER_SIZE = 128;
var sb = new StringBuilder(BUFFER_SIZE);
Read(sb);
var result = sb.ToString();

注:很难说这是不是正确的解决方案,而不知道C++函数的细节。您可能只需要传递一个字符串。

Matthew Watson的回答中增加了一项:您还需要将stringbuilder参数封送到LPSTR(char*),如


除了Matthew Watson的答案之外,还需要将stringbuilder参数封送到LPSTR(char*),如


除了Matthew Watson的答案之外,还需要将stringbuilder参数封送到LPSTR(char*),如


除了Matthew Watson的答案之外,还需要将stringbuilder参数封送到LPSTR(char*),如


为什么使用char[],您可以使用string。如果您有dll代码,那么您可以调试“Read”函数并查看函数内部发生的情况。为什么使用char[],您可以使用string。如果您有dll代码,那么您可以调试“Read”函数并查看函数内部发生的情况。为什么使用char[],您可以使用字符串。如果您有dll代码,则可以调试“Read”函数并查看函数内部发生的情况。为什么使用char[],则可以使用字符串。如果您有dll代码,则可以调试“Read”函数并查看函数内部发生的情况。非常感谢,这很有帮助,但正确的答案是:[Marshallas(UnmanagedType.LPStr)]StringBuilder Test非常感谢您,它很有帮助,但正确的答案是:[Marshallas(UnmanagedType.LPStr)]StringBuilder Test非常感谢您,它很有帮助,但正确的答案是:[Marshallas(UnmanagedType.LPStr)]StringBuilder非常感谢您,它很有帮助,但正确的答案是:[Marshallas(UnmanagedType.LPStr)]StringBuilder temp