当前位置:  开发笔记 > 编程语言 > 正文

tStringList将C#传递给Delphi DLL

如何解决《tStringList将C#传递给DelphiDLL》经验,为你挑选了1个好方法。

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

function 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?



1> OregonGhost..:

你很可能没有运气.TStringList不仅仅是一个数组,它是一个完整的类,确切的实现细节可能与.NET不同.看看Delphi VCL源代码(也就是说,如果你有的话)并试着找出你是否可以用C#重建类,并在最好的朋友Interop Marshaller的帮助下传递它.请注意,即使Delphi字符串类型与.NET字符串类型不同,并且传递它而不告诉编组器他应该做什么,他很可能将它作为char数组传递.

除此之外,我建议更改Delphi DLL.在非Delphi客户端使用的DLL中暴露特定于Delphi的东西永远不是一件好事.使参数成为PChar的数组,你应该没问题.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有