字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#

Posted

技术标签:

【中文标题】字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#【英文标题】:string array C# Interoperability to C++ dll; string array from C# to C++ dll which sets the data and sends it back to c# 【发布时间】:2011-04-14 06:59:30 【问题描述】:

这就是我目前所拥有的...基本上我使用 c++ dll 来填充树组件并设置它们,然后将它们返回到托管 csharp 代码。我遇到了问题,并且尝试了一整天都没有成功。我想要完成的只是将带有字符串数组的结构从 c# 发送到 c++ dll,在其中设置树的所有组件,然后将其发送回 c#。这就是我得到的.. 唯一需要保留的是 c++ 代码中的数据是从 TCHAR 数组中设置的。

c++ 无管理代码:

 struct GetTreeStruct
     
     char** components;
 ;

extern "C" __declspec(dllexport) void __stdcall GetTree(GetTreeStruct* myStruct);

void __stdcall GetTree(GetTreeStruct* myStruct)


    myStruct->components = new char *[sNumberReturned]; //sNumberReturned = some # 

    for(i = 0;i<sNumberReturned;i++)
    
       myStruct->components[i] = (char*)(arrayItem[i]); //arrayItem is TCHAR array
    


c# 托管代码:

public struct GetTreeStruct

    [MarshalAs(UnmanagedType.LPArray)]
    public string[] treeComponents;


[DllImport(@"C:\Users\James\Desktop\ShaggyDLL\Release\ShaggyDLL.dll")]
public static extern void GetTree(ref GetTreeStruct theStruct);

在我的主要..

//getTree
getTreeStruct.treeComponents = null;

Console.WriteLine("Get Tree:");
NativeMethods.GetTree(ref getTreeStruct);

list<string> list = getTreeStruct.treeComponents.ToList();

//print list
//... you know the code

非常感谢任何帮助。谢谢,詹姆斯。

【问题讨论】:

【参考方案1】:

您不需要为 C# 传递 16 位字符来获取它吗? (双关语)

【讨论】:

以上是关于字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#的主要内容,如果未能解决你的问题,请参考以下文章

从 PInvoke 返回一个字符串? [复制]

C#引用c++DLL结构体数组注意事项(数据发送与接收时)

时间:2019-04-01 标签:c#dllimport parameters shift

将 c++ dll 的 char 指针数组传递给 c# 字符串

C# 调用C++ DLL,而c++函数的有一个参数需要是null,该怎么传递?

与 C# 控制台应用程序互操作 C++ (DLL) 的问题