-1

如何将包含来自 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);

然后在帕斯卡:

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是正确的。

4

1 回答 1

0

解决了

    [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());
于 2015-10-25T19:54:29.183 回答