将字符串从 C# 发送到 C++

Posted

技术标签:

【中文标题】将字符串从 C# 发送到 C++【英文标题】:Send a string from C# to C++ 【发布时间】:2012-02-21 17:32:12 【问题描述】:

我有一个 C++ 程序,它对 char search[500] 数组进行一些处理。这里要注意的是,search[] 必须从 C# 程序中赋值。

考虑一下,我有这个 C# 程序,它从 textbox 获取用户的输入,并且必须将此 string 发送到 C#。

我已经能够将数据、函数和变量从 C++ 导出到 C#,但我不熟悉反向操作。

[DllImport("Test.dll", EntryPoint = "fnmain", CallingConvention = CallingConvention.Cdecl , CharSet = CharSet.Ansi)]
private static extern int fnmain();//pass what in parameter?

C++

//search[] parameter has to be here. What type to be assigned to get from C# and further get search[] char array
    int main(char search[])
    
    ..
    

【问题讨论】:

显示您的实际 C++ 函数签名,而不仅仅是您的 C# 近似值。 C++ 函数是否应该命名为“fnmain”而不是“main”? 【参考方案1】:

我认为您希望搜索为string。我相信 CharSet.Ansi 是确保互操作将字符串转换为 char * 所需要的一切。

【讨论】:

这是否意味着在 C# 中调用函数 fnmain(string searchtext) 会自动将其转换为 fnmain(char search[]) 以进行 C++ 互操作? 这里不需要编组等? @Ramhound :或者他可以尝试并获得静默内存损坏或内存泄漏但不知道。他来 SO 是为了得到一个准确的答案——“自己试试”是没有用的。 是的,我就是这个意思。会有编组,但它会为你完成。【参考方案2】:

这听起来可能很愚蠢。您是否考虑过使用命令行参数调用 C++ 程序?如果初始化需要很多时间,您可以使用管道或从文件读取/写入文件的概念。如果您可以进行一点套接字编程,那将意味着真正的异步数据传递。希望这会有所帮助。

【讨论】:

以上是关于将字符串从 C# 发送到 C++的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 到 C#)?

读取从 c++ 发送到 C# 的 lParam 作为字符串

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

使用命名管道将图像从 C++ 发送到 C# 应用程序

将数据从 C++ 发送到 C# [重复]

将处理后的视频从 C# 程序发送到 C++ 程序