如何将包含文件路径的字符串从c#传递到需要PChar参数的Pascal DLL中的函数

本文关键字:PChar 参数 函数 DLL Pascal 包含 文件 路径 字符串 | 更新日期: 2023-09-27 18:19:05

如何将包含c#文件路径的字符串传递到需要PChar参数的Pascal DLL中的函数?

Pascal DLL有一个"FileExists"调用来检查参数(AFile: PChar)是否作为文件存在。我已经成功导入了dll,如下所示:

[DllImport(pcsm,
    CallingConvention = CallingConvention.StdCall,
    CharSet = CharSet.Unicode,
    EntryPoint = "PCS")]

并声明函数如下:

public static extern int PCSM([MarshalAs(UnmanagedType.BStr)] string AFile);

then in Pascal:

function PCS(AFile: PChar): PChar; stdcall;
var XD: IXMLDocument;
Race: TPCSRace;
begin
try
     if not FileExists(AFile) then
        raise EFOpenError.CreateFmt('File "%s" not found', [AFile]);
     else
         //do something with AFile...
end

但是当我这样调用函数时:

pascalPath = "path''to''the''file";
PCSM(pascalPath);

Dll不操作文件(它必须被编辑,它是一个xml文件)。

Dll是一个组织官方提供的,所以不能编辑,我已经减少了代码,但是Dll是正确的

如何将包含文件路径的字符串从c#传递到需要PChar参数的Pascal DLL中的函数

SOLVED

    [DllImport(pcsm,
        CallingConvention = CallingConvention.Winapi,
        CharSet = CharSet.Ansi,
        EntryPoint = "PCS")]
    public static extern int PCS(string AFile);

        StringBuilder pascalPath = new StringBuilder(xmlPath, xmlPath.Length);
        int result = PCS(pascalPath.ToString());