gpt4 book ai didi

c# - 将 C# 中的 tStringList 传递给 Delphi DLL

转载 作者:行者123 更新时间:2023-11-30 18:56:08 26 4
gpt4 key购买 nike

我有一个 Delphi DLL,其函数定义为:

函数 SubmitJobStringList(joblist: tStringList; var jobno: Integer): Integer;

我是从 C# 调用它的。如何将第一个参数声明为 C# 中不存在的 tStringList。我目前的声明为:

[DllImport("opt7bja.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int SubmitJobStringList(string[] tStringList, ref int jobno);

但是当我调用它时,我得到了一个内存访问冲突异常。

有人知道如何从 C# 正确传递到 tStringList 吗?

最佳答案

你很可能不会有任何运气。 TStringList 不仅仅是一个数组,它还是一个成熟的类,具体的实现细节可能与 .NET 可能有所不同。看看 Delphi VCL 源代码(也就是说,如果你有的话)并尝试找出是否可以用 C# 重建类,并在你最好的 friend Interop Marshaller 的帮助下通过它。请注意,即使是 Delphi 字符串类型也不同于 .NET 字符串类型,并且在不告诉编码器他应该做什么的情况下传递它,他很可能会将其作为字符数组传递。

除此之外,我建议更改 Delphi DLL。在将由非 Delphi 客户端使用的 DLL 中公开任何特定于 Delphi 的内容从来都不是一件好事。将参数设为 PChar 数组,您应该没问题。

关于c# - 将 C# 中的 tStringList 传递给 Delphi DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/152261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com