C# 如何封送二维TCHAR数组?

C# 如何封送二维TCHAR数组?,c#,c++,C#,C++,我有一个DLL函数,可以将文件转换为另一种格式。 该函数生成多个文件作为输出。 因此,它用输出文件的路径填充第二个参数 < > C++函数定义如下: int Convert(LPTSTR lpSource, TCHAR outputFileName[][MAX_PATH]); int Convert(LPTSTR lpSource, LPTSTR *plpOutputFileName, int size); 如何将第二个参数mashal化,以便我的C#应用程序能够正确接收输出文件路径 [Dl

我有一个DLL函数,可以将文件转换为另一种格式。 该函数生成多个文件作为输出。 因此,它用输出文件的路径填充第二个参数

< > C++函数定义如下:

int Convert(LPTSTR lpSource, TCHAR outputFileName[][MAX_PATH]);
int Convert(LPTSTR lpSource, LPTSTR *plpOutputFileName, int size);
如何将第二个参数mashal化,以便我的C#应用程序能够正确接收输出文件路径

[DllImport("Convert.dll")]
private static extern int Convert(
  [MarshalAs(UnmanagedType.LPTStr)] string lpszSource,
  ????
);

提前感谢。

我会使用C++/CLI使事情变得更简单(它非常擅长在本机C/C++代码和托管代码之间构建桥接层)

基本上,您可以编写一个精简的C++/CLI层,公开一个在其主体中调用本机函数的方法,然后将返回的本机字符串复制到一个
gcnew
-ly创建的
数组
,并将其返回给C管理的调用方。

我终于找到了答案。 我把C++函数改为:

int Convert(LPTSTR lpSource, TCHAR outputFileName[][MAX_PATH]);
int Convert(LPTSTR lpSource, LPTSTR *plpOutputFileName, int size);
C#宣言如下:

[DllImport("Convert.dll")]
private static extern int Convert(
    [MarshalAs(UnmanagedType.LPTStr)] string lpszSource,
    [In, Out] String[] outputFileName,
    int size
);

谢谢大家的帮助。

您必须将其封送为1D数组,并通过编程将其传输到正确的2D数组。首先,感谢您的帮助。我尝试了'ref string[]lpszOutputFileName',在函数返回后得到了System.ExecutionException。我也尝试了许多不同的方法,但都不奏效。不确定如何正确地进行,仍然在探索。C++函数是根本上的危险,它无法知道数组是通过了多大。当函数损坏GC堆时,这会以非常不愉快的方式失败,ExecutionEngineeException是常见的结果。首先修复C++代码,通过将C++函数改为int转换(LPTSTR LPoStand,TCHAR OuttoFrimeNAM[] [Max OpthPo],int NoUnOutOutsFooPosits)来修复C++函数;我仍然不知道如何封送第二个参数。